Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用AsyncTask的活动在关闭时崩溃_Android_Android Asynctask - Fatal编程技术网

Android 使用AsyncTask的活动在关闭时崩溃

Android 使用AsyncTask的活动在关闭时崩溃,android,android-asynctask,Android,Android Asynctask,当某个活动被销毁时,我试图遵循以下步骤来保护我的后台任务。因为我想在不同的活动中重用我的任务,所以我为每个任务实现了一个“TaskMethod”类 public class TaskMethod { private SomeActivity mAct_ = null; private MyTask mTask_ = null; public TaskMethod(SomeActivity act) { mAct_ = act; }

当某个活动被销毁时,我试图遵循以下步骤来保护我的后台任务。因为我想在不同的活动中重用我的任务,所以我为每个任务实现了一个“TaskMethod”类

public class TaskMethod
{
   private SomeActivity mAct_ = null;
   private MyTask mTask_ = null;

    public TaskMethod(SomeActivity act)
    {
        mAct_ = act;
    }

    public void execute()
    {
           mTask_ = (MyTask) mAct_.getLastNonConfigurationInstance();

           if (mTask_ != null)
           {
                mTask_.activity_ = mAct_;

                if (mTask_.isFinished_)
                   mTask_.updateUI();
           }
           else
           {
                mTask_ = new MyTask();
                mTask_.activity_ = mAct_;
                mTask_.execute();
           }
    }

    public void cleanUp()
    {
           myTask_.activity_ = null;

           if (mAct_.isFinishing())
            myTask_.cancel(false);
    }

    static class MyTask extends AsyncTask<Void, Void, String>
    {

       @Override
        protected String doInBackground(Void... params)
        {
            ...
        }

    @Override
    protected void onPostExecute(String result) 
        {
            ...
            isFinished_ = true;
            updateUI();
        }

        public void updateUI()
        {
            if (activity_ != null)
            {
                ...
            }            
        }

        SomeActivity activity_ = null;
        boolean isFinished_  = false;
}
}

但是,当我的活动结束时,我会遇到以下异常:

07-21 19:37:15.195: E/AndroidRuntime(25724): FATAL EXCEPTION: main
07-21 19:37:15.195: E/AndroidRuntime(25724): java.lang.RuntimeException: Unable to destroy activity 
{com.signals.signals/com.signals.signals.activity.PreferencesActivity}: java.lang.NullPointerException
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3108)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3126)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.access$1200(ActivityThread.java:122)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1179)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.os.Looper.loop(Looper.java:137)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.main(ActivityThread.java:4340)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at java.lang.reflect.Method.invokeNative(Native Method)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at java.lang.reflect.Method.invoke(Method.java:511)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at dalvik.system.NativeStart.main(Native Method)
07-21 19:37:15.195: E/AndroidRuntime(25724): Caused by: java.lang.NullPointerException
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.signals.signals.activity.tasks.CitiesTaskMethod.cleanUp(CitiesTaskMethod.java:92)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.signals.signals.activity.PreferencesActivity.onDestroy(PreferencesActivity.java:117)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.Activity.performDestroy(Activity.java:4629)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1079)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3095)

我做错了什么??谢谢

任务
上调用
cleanUp()
时,它似乎是
null
,因此在进行调用之前只需对变量进行null检查。希望这能有所帮助。

当您完成活动时,将调用onDestroy(),在其中,您将调用自己的清理函数

此函数中的一个变量为null,因此它返回NullPointerException,因此无法销毁活动


在清理函数中放置一个断点,并检查其中使用的变量值。其中一个(很可能是mAct_)为空。

我在想。。。但是如果活动还没有被销毁,任务怎么可能是空的呢?它毕竟发生在onDestroy()方法中。
07-21 19:37:15.195: E/AndroidRuntime(25724): FATAL EXCEPTION: main
07-21 19:37:15.195: E/AndroidRuntime(25724): java.lang.RuntimeException: Unable to destroy activity 
{com.signals.signals/com.signals.signals.activity.PreferencesActivity}: java.lang.NullPointerException
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3108)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3126)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.access$1200(ActivityThread.java:122)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1179)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.os.Looper.loop(Looper.java:137)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.main(ActivityThread.java:4340)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at java.lang.reflect.Method.invokeNative(Native Method)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at java.lang.reflect.Method.invoke(Method.java:511)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at dalvik.system.NativeStart.main(Native Method)
07-21 19:37:15.195: E/AndroidRuntime(25724): Caused by: java.lang.NullPointerException
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.signals.signals.activity.tasks.CitiesTaskMethod.cleanUp(CitiesTaskMethod.java:92)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at com.signals.signals.activity.PreferencesActivity.onDestroy(PreferencesActivity.java:117)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.Activity.performDestroy(Activity.java:4629)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1079)
07-21 19:37:15.195: E/AndroidRuntime(25724):    at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3095)