当内存助推器杀死我的应用程序时,它强制关闭
我编写了一个具有主要活动,服务和广播接收器的应用程序。该应用程序,直到我试图用名为内存助推器的应用程序杀死它。然后强制关闭,我的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)
任何人都可以解释我为什么? 谢谢!
编辑:详细堆栈跟踪
和线122是:
wifi_state = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
如果我注释掉线121,我得到的NullPointerException ON NEXT LINE是:
wifi_check.setTextColor(Color.BLACK);
好吧,我想出了什么是错的。这是解决方案。
当任务管理器或任何应用程序,杀死我的应用程序它强制关闭。这是因为从2.2 Android版本,你不能完全杀死与其他应用程序的应用程序的目的。 Android只是不会允许的。
当任务管理器或任何应用程序“杀死”我的应用程序,并且这个应用程序有一个运行的服务,一个android操作系统,希望他们再次运行,所以它开始再次运行服务。
因为活动是DEAD,我在那里实例化我的对象,他们不能再次在服务中使用。一些对象必须在我做的服务类中实例化。 (所以它们不为空)
- 所以我在我的自定义服务类中创建了WifiManager和其他重要对象的一个实例。当OS再次启动服务,他们被实例化,并准备在使用(他们不为null)
对不起我的英文不好..希望你明白我想说:)
你可以做什么:覆盖你的主要onDestroy活动,并在那里,关闭一切正常(您的服务,广播等)。在这种情况下,你不会再有一个力量了。
把-1的人,请解释... –
第一...这不是一个解决这个问题,第二... onDestroy将或不会被称为... – Selvin
@Selvin,用户问他为什么他我正在给他一个合理的答案,每个人都可以同意这一点。第二,如果你检查文档:onDestroy()=在你的活动被销毁之前你收到的最后一个电话。这可能是因为活动正在完成(某人称为finish(),或者因为系统暂时销毁此活动实例以节省空间,您可以使用isFinishing()方法区分这两种情况。 –
conMan
是null
因为在任何代码路径下,你没有初始化它。确定一个更好的地方来初始化涵盖这种情况的那个值。
每当你杀死一个应用程序它可能会出乎意料地表现出来。 –
问题是,当内存不足时,android会杀死我的应用程序,然后强制再次关闭。 – rootpanthera
nlsbshtr,我没有 – rootpanthera