【问题标题】:Android: finish() Activity Runtime ExceptionAndroid:完成()活动运行时异常
【发布时间】:2016-01-21 17:38:41
【问题描述】:

我正在通过 finish() 关闭一个活动。

它在多台设备上运行良好,但在运行 Android 4.4 的三星 Galaxy S3 Neo 上出现以下问题:

java.lang.RuntimeException
android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3706)
android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3724)
android.app.ActivityThread.access$1500(ActivityThread.java:169)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5476)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
dalvik.system.NativeStart.main(Native Method)
Caused by: android.util.Log.println_native(Native Method)
android.util.Log.e(Log.java:307)
com.ads.adstimer.fragment.Registration.RegistrationActivity.onDestroy(RegistrationActivity.java:214)
android.app.Activity.performDestroy(Activity.java:5623)
android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1123)
android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3693)
android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3724)
android.app.ActivityThread.access$1500(ActivityThread.java:169)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1330)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5476)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
dalvik.system.NativeStart.main(Native Method)

我找到了两个关于该主题的帖子:FirstSecond 但他们没有帮助我。

我的活动代码。请注意,我使用的是AppIntro

    public class RegistrationActivity extends AppIntro {

       private AsyncTaskRegisterInBackground registerPushToken;

       (...)

          @Override
            public void onDonePressed() {

               (...)
               if (regid.isEmpty()) {
                                registerPushToken = new AsyncTaskRegisterInBackground();
                                registerPushToken.setParams(activity, gcm, regid);
                                registerPushToken.execute();
                            }
               (...)

            }

    @Override
        public void onTaskCompleted(String responseRegid) {
            try {
                // load authToken from Server: JsonObjectRequest

 builderOnFailureDialog = new MaterialDialog.Builder(activity)
                        .title(getResources().getString(R.string.registrierung_dialog_registrieren_failure_retry_title))
                        .content(onFailureDialogContent)
                        .positiveText(getResources().getString(R.string.registrierung_dialog_registrieren_failure_retry_positive_text))
                        .negativeText(getResources().getString(R.string.registrierung_dialog_registrieren_failure_retry_negative_text))
                        .onNegative(new MaterialDialog.SingleButtonCallback() {
                            @Override
                            public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                                activity.finish();
                            }
                        }); 

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        try {
            onFailureDialog.dismiss();
            onSuccessDialog.dismiss();
        } catch (Exception e) {
            Log.e("Activity.onDestroy()", e.getMessage());
        }
    }

}

或者是异步任务在后台运行的问题的原因?

【问题讨论】:

    标签: java android android-activity android-asynctask


    【解决方案1】:

    runOnUiThread() 内调用finish()

    替换

    finish();
    

    runOnUiThread(new Runnable() {
                    public void run() {
                        finish()
    
                    }
                });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多