简体   繁体   English

Android:finish()活动运行时异常

[英]Android: finish() Activity Runtime Exception

I am closing an activity via finish(). 我正在通过finish()关闭活动。

It works fine on several devices but on a Samsung Galaxy S3 Neo running Android 4.4 I get the following issue: 它在几种设备上都可以正常工作,但是在运行Android 4.4的Samsung 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)

I have found two posts about that subject: First , Second But they did not help me. 我找到了有关该主题的两篇文章: 第一第二,但它们对我没有帮助。

My activity code. 我的活动代码。 Note that I am using AppIntro : 请注意,我正在使用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());
        }
    }

}

Or is the reason for the problem the async task running in background? 还是问题的原因是异步任务在后台运行?

call finish() inside runOnUiThread() . runOnUiThread()内部调用finish() runOnUiThread()

ie

replace 更换

finish();

with

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

                }
            });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM