2013-01-24 40 views
0

我编写了一个具有主要活动,服务和广播接收器的应用程序。该应用程序,直到我试图用名为内存助推器的应用程序杀死它。然后强制关闭,我的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 [email protected] 
01-24 16:25:06.790: E/AndroidRuntime(4820): Caused by: java.lang.NullPointerException 

01-24 16:25:06.790:E/AndroidRuntime(4820):在app.wifito3g.Broadcast.onReceive(Broadcast.java:122)

任何人都可以解释我为什么? 谢谢!

编辑:详细堆栈跟踪

enter image description here

和线122是:

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

如果我注释掉线121,我得到的NullPointerException ON NEXT LINE是:

wifi_check.setTextColor(Color.BLACK); 
+3

每当你杀死一个应用程序它可能会出乎意料地表现出来。 –

+0

问题是,当内存不足时,android会杀死我的应用程序,然后强制再次关闭。 – rootpanthera

+0

nlsbshtr,我没有 – rootpanthera

回答

0

好吧,我想出了什么是错的。这是解决方案。

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

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

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

  4. 所以我在我的自定义服务类中创建了WifiManager和其他重要对象的一个​​实例。当OS再次启动服务,他们被实例化,并准备在使用(他们不为null)

对不起我的英文不好..希望你明白我想说:)

1

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

+0

把-1的人,请解释... –

+2

第一...这不是一个解决这个问题,第二... onDestroy将或不会被称为... – Selvin

+0

@Selvin,用户问他为什么他我正在给他一个合理的答案,每个人都可以同意这一点。第二,如果你检查文档:onDestroy()=在你的活动被销毁之前你收到的最后一个电话。这可能是因为活动正在完成(某人称为finish(),或者因为系统暂时销毁此活动实例以节省空间,您可以使用isFinishing()方法区分这两种情况。 –

0

conMannull因为在任何代码路径下,你没有初始化它。确定一个更好的地方来初始化涵盖这种情况的那个值。

相关问题