以下に示すように、アプリケーション内にいくつかのグローバル変数を定義して、アプリケーションを拡張しました。私は、アプリを離れると、より多くのアプリを開き、それらを少し再生し、私のアプリに戻って、グローバル変数が削除され、私のアプリケーションがクラッシュします。 2つの質問があります:グローバル変数の問題
1-これはどのように可能ですか?
2バックグラウンドに行くときにアプリを強制終了するにはどうすればよいですか?私は
おかげ
public class GlobalVars extends Application {
public static HashMap<Integer, String> ID2Cat = new HashMap<Integer, String>();
// User logged bool
public static boolean isLogged = false;
// Current menu item
public static int currentMenuItem = 0;
public static boolean isHome = false;
// Goodideas
public static JSONObject goodIdeas = new JSONObject();
// Meteo
public static JSONArray weatherItems = new JSONArray();
// More stuff
}
...私はそれを行うことになっていないんだけど、私は他の解決策を見つけることができません知っているLogcat
は、ここに私は私のアプリが殺されていると思わせるものです。これは他のアプリで遊んでいるときに表示されます。
I/ActivityManager(2465): Process com.mysite.myapp (pid 23538) has died.
I/WindowManager(2465): WIN DEATH: Window{4852a678 com.mysite.myapp/com.mysite.myapp.Home paused=false}
I/WindowManager(2465): WIN DEATH: Window{485b63a8 com.mysite.myapp/com.mysite.myapp.Home paused=false}
I/WindowManager(2465): WIN DEATH: Window{4826fbf8 com.mysite.myapp/com.mysite.myapp.ItemList paused=false}
I/WindowManager(2465): WIN DEATH: Window{48286f90 com.mysite.myapp/com.mysite.myapp.ItemDetail paused=false}
W/GpsLocationProvider(2465): Unneeded remove listener for uid 1000
D/GpsLocationProvider(2465): stopNavigating
D/gps_BRCM(2465): [status check] on_stop() : GPS_STATUS_SESSION_END
D/gps_BRCM(2465): gps_engine_status_update 2
D/GpsLocationProvider(2465): send an intent to notify that the GPS has been enabled or disabled
D/gps_BRCM(2465): gps_stop: called
V/GpsLocationProvider(2465): hybridGpsSensorDeregister : No registered sensorManager
D/GpsLocationProvider(2465): hybridGpsSensorDeregister
「データを初期化する」とはどういう意味ですか?アプリを起動すると、すべてのグローバル変数が初期化されるスプラッシュ画面が表示されます。アプリが死んだとき(つまり、すべてのアクティビティが終了したとき)にのみ削除されるデータを持つ方法はありませんか? – jul
@jul: "アプリを起動すると、すべてのグローバル変数が初期化されているスプラッシュ画面が表示されます。"それは賢明な動きではありません。 「アプリが死んだとき(つまり、すべてのアクティビティが終了したときにのみ)削除されるデータを持つ方法はありませんか?」 - それはすでに起こっていることです。しかし、OSが決定すると、「すべてのアクティビティは終了しました。いつでも可能です。ユーザーがあなたのアプリを離れると、Androidはアクティビティを終了していつでもプロセスを終了できます。 – CommonsWare
すべてのデータをスプラッシュ画面に読み込むのはなぜですか(アプリが起動されたとき)は賢明ではありませんか?私はそれらをWebサービスから取得し、HTTPリクエスト+ jsonを後で解析することで、アプリケーションのレスポンスが低下します。さらに、バックグラウンドで(例えば別のアプリケーションを使って)いるときに私のアプリを開くと、それは再び開始して、私のinitデータをロードするか、アクティビティが殺されていない場合はどこから離れるかを開始する必要があります。前者の場合、アクティビティがまだ生きている場合は、グローバル変数が削除されてはいけません。 – jul