我编写了一个具有主要活动,服务和广播接收器的应用程序。该应用程序,一直工作,直到我试图用称为内存助推器的应用程序杀死它。然后它强制关闭,我的logcat抛出2个NULLPOINTEREXCEPTIONS。在我的textview(在mainactivity中声明并传递给广播接收器)和ConnectiviyManager(也在主要活动中声明,但在广播接收器中使用)。
01-24 16:25:06.790: E/AndroidRuntime(4820): java.lang.RuntimeException: Error receiving broadcast Intent { act=ACTION_PERFORMED (has extras) } in app.wifito3g.Broadcast@40628910
01-24 16:25:06.790: E/AndroidRuntime(4820): Caused by: java.lang.NullPointerException
01-24 16:25:06.790:E / AndroidRuntime(4820):at app.wifito3g.Broadcast.onReceive(Broadcast.java:122)
有人可以解释我为什么吗? 谢谢!
编辑:详细的堆栈跟踪
和第122行是:
wifi_state = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
如果我注释掉第121行,我会在下一行获得NULLPOINTEREXCEPTION:
wifi_check.setTextColor(Color.BLACK);
答案 0 :(得分:1)
您可以做什么:覆盖主要活动的onDestroy,并在那里正确关闭所有内容(您的服务,广播等)。在这种情况下,你不会再受力了。
答案 1 :(得分:0)
conMan
是null
因为,无论您运行的代码路径是什么,都没有初始化它。确定一个更好的地方来初始化涵盖这种情况的值。
答案 2 :(得分:0)
好的,我发现了什么是错的。这是解决方案。
当任务管理器或任何应用程序杀死我的应用程序时,它会强制关闭。那是因为从2.2 Android版本你不能完全杀死与其他应用程序的应用程序为此目的。 Android只是不允许这样做。
当任务管理器或任何应用程序“杀死”我的应用程序,并且此应用程序有一个正在运行的服务,一个Android操作系统,希望它们再次运行,所以它再次开始运行服务。
因为活动是DEAD并且我实例化了我的对象,所以它们不能再次用于服务。一些对象必须在我所做的服务类中实例化。 (所以它们不是空的)
抱歉我的英语不好..希望你明白我想说的话:)。