当内存助推器杀死我的应用程序时,它强行关闭

时间:2013-01-24 15:38:04

标签: java android

我编写了一个具有主要活动,服务和广播接收器的应用程序。该应用程序,一直工作,直到我试图用称为内存助推器的应用程序杀死它。然后它强制关闭,我的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)

有人可以解释我为什么吗? 谢谢!

编辑:详细的堆栈跟踪

enter image description here

和第122行是:

wifi_state = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

如果我注释掉第121行,我会在下一行获得NULLPOINTEREXCEPTION:

wifi_check.setTextColor(Color.BLACK);

3 个答案:

答案 0 :(得分:1)

您可以做什么:覆盖主要活动的onDestroy,并在那里正确关闭所有内容(您的服务,广播等)。在这种情况下,你不会再受力了。

答案 1 :(得分:0)

conMannull因为,无论您运行的代码路径是什么,都没有初始化它。确定一个更好的地方来初始化涵盖这种情况的值。

答案 2 :(得分:0)

好的,我发现了什么是错的。这是解决方案。

  1. 当任务管理器或任何应用程序杀死我的应用程序时,它会强制关闭。那是因为从2.2 Android版本你不能完全杀死与其他应用程序的应用程序为此目的。 Android只是不允许这样做。

  2. 当任务管理器或任何应用程序“杀死”我的应用程序,并且此应用程序有一个正在运行的服务,一个Android操作系统,希望它们再次运行,所以它再次开始运行服务。

  3. 因为活动是DEAD并且我实例化了我的对象,所以它们不能再次用于服务。一些对象必须在我所做的服务类中实例化。 (所以它们不是空的)

  4. 所以我在自定义服务类中创建了WifiManager和其他重要对象的实例。当OS再次启动Service时,它们将被实例化并准备就绪(它们不为空)
  5. 抱歉我的英语不好..希望你明白我想说的话:)。