0

我编写了一个具有主要活动、服务和广播接收器的应用程序。该应用程序一直有效,直到我尝试使用称为内存增强器的应用程序将其杀死。然后它强制关闭,我的 logcat 抛出 2 NULLPOINTEREXCEPTIONS。在我的 textview(在 mainactivity 中声明并传递给广播接收器)和 ConnectiviyManager(也在 main Activity 中声明,但在广播接收器中使用)。

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): 在 app.wifito3g.Broadcast.onReceive(Broadcast.java:122)

谁能解释我为什么?谢谢!

编辑:详细的堆栈跟踪

在此处输入图像描述

第 122 行是:

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

如果我注释掉第 121 行,我会在 NEXT LINE 上得到 NULLPOINTEREXCEPTION,即:

wifi_check.setTextColor(Color.BLACK);
4

3 回答 3

1

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

于 2013-01-24T15:42:46.897 回答
0

conMannull因为,在您运行的任何代码路径中,您都没有对其进行初始化。确定一个更好的位置来初始化涵盖这种情况的值。

于 2013-01-24T15:59:58.293 回答
0

好的,我知道出了什么问题。这是解决方案。

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

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

  3. 因为活动是死的,我在那里实例化了我的对象,它们不能再次用于服务。有些对象必须在我创建的服务类中实例化。(所以它们不为空)

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

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

于 2013-01-25T17:26:57.320 回答