0

メインアクティビティ、サービス、ブロードキャストレシーバーを備えたアプリをプログラムしました。アプリは、メモリブースターと呼ばれるアプリでそれを殺そうとするまで動作します。次に、強制的に閉じて、logcatが2つのNULLPOINTEREXCEPTIONSをスローします。私のテキストビュー(メインアクティビティで宣言され、ブロードキャストレシーバーに渡されます)、および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):app.wifito3g.Broadcast.onReceive(Broadcast.java:122)

誰かが私に理由を説明できますか?ありがとう!

編集:詳細なスタックトレース

ここに画像の説明を入力してください

122行目は次のとおりです。

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

121行目をコメントアウトすると、次の行に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. タスク マネージャーまたは任意のアプリがアプリを「強制終了」し、このアプリに実行中のサービス (Android OS) がある場合、サービスを再度実行する必要があるため、サービスの実行を再開します。

  3. アクティビティが死んでいて、そこでオブジェクトをインスタンス化したため、それらをサービスで再び使用することはできません。一部のオブジェクトは、作成したサービス クラスでインスタンス化する必要があります。(したがって、それらは null ではありません)

  4. そこで、カスタム サービス クラスに WifiManager とその他の重要なオブジェクトのインスタンスを作成しました。OS が再びサービスを開始すると、それらはインスタンス化され、使用できるようになります (null ではありません)。

私の悪い英語で申し訳ありません..私が言おうとしたことを理解していただければ幸いです:)

于 2013-01-25T17:26:57.320 に答える