Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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线程和处理程序NullPointerException_Android_Multithreading - Fatal编程技术网

Android线程和处理程序NullPointerException

Android线程和处理程序NullPointerException,android,multithreading,Android,Multithreading,我是Android的初学者。我的处理程序有一个NullPointerException 我正在线程内调用一个服务,并使用处理程序更新活动a中的UI 我正在使用通知显示另一个活动B 假设当线程在活动A中运行时,我正在单击通知,活动B正在调用,经过一些延迟后,应用程序崩溃,我认为处理程序丢失了活动A的上下文。我想知道如何处理这种情况,假设如果我使用AsyncTask,AsyncTask会处理上下文问题吗?任何人都可以帮我解决这个问题。提前谢谢 活动-A: Thread t = new Threa

我是Android的初学者。我的处理程序有一个NullPointerException

  • 我正在线程内调用一个服务,并使用处理程序更新活动a中的UI
  • 我正在使用通知显示另一个活动B

    假设当线程在活动A中运行时,我正在单击通知,活动B正在调用,经过一些延迟后,应用程序崩溃,我认为处理程序丢失了活动A的上下文。我想知道如何处理这种情况,假设如果我使用AsyncTask,AsyncTask会处理上下文问题吗?任何人都可以帮我解决这个问题。提前谢谢

活动-A:

Thread t = new Thread() {
    @Override
    public void run() {
        // call service get response
        handler.sendMessage(msg);
    }
}
单击通知时,我显示活动B

logcat o/p只是 handler.sendMessage行中的NullPointerException
在处理程序内部,我正在更新活动B的UI。

初始化处理程序,并确保消息不为null

我将线程转换为AsyncTask,如果在活动A处于暂停状态时AsyncTask正在运行,我将取消AsyncTask,这是问题的临时修复。但是我正在寻找完美的解决方案。

你能发布处理程序定义吗?你还没有启动你的线程。logcat中有什么?从这个代码段,没有
logcat
,就不可能跟踪问题。检查你是否启动了线程。消息不是null,但处理程序是,由于处理程序与活动A关联,并且我当前正在显示活动B。异步任务是否会进行修复@Lucian NovacIt可能是一个解决方案,但您必须注意方法、doInBackground上的网络操作和onPostExecute上的ui操作。我可以在doInBackground中更改相同的代码,并在onPostExecute中更改处理程序,但这能解决我的问题吗?我的意思是,如果启动活动B时asyncTask仍在运行,它不应该认为继承选项会帮助您。A exdend C,B exdend C和in C放置处理程序