2

サービス ファイル (backgroundService.java) 内で静的 Arraylist変数を宣言しました。プッシュ メッセージを受信したら (GCM を使用して)、静的変数を更新しています。私は4.0.4デバイス(Samsung S3)を使用しています..アプリがバックグラウンドになり、memuボタンを長押ししてアプリケーションをスワイプすると、静的変数が空になります(アプリをスワイプすると終了しますが、強制停止されません)、サービスはしばらく一時停止され、再び開始されます。つまり、サービスの onDestroy メソッドは呼び出されず、代わりに OnCreate メソッドが一時停止の後に呼び出されます。その後、静的 ArrayList は空になります。それを解決する方法? 静的 Arraylist の値を失いたくありません..

この問題は、Android バージョン 4.0 以降のデバイスでのみ発生します。

public class BackgroundService extends Service 

{ プライベート タイマー タイマー = 新しいタイマー();

Context mContext;

String LOG_TAG=BackgroundService.class.getSimpleName();
    ApplicationInfo ai;
    private static boolean isRunning = false; 
public static ArrayList<String> mDMPush=new ArrayList<String>();

@Override
public void onCreate() 
{
      super.onCreate();
      Log.e(LOG_TAG,"on create ");
      isRunning = true; 


}


@Override
public void onStart(Intent intent, int startId) {

    super.onStart(intent, startId);  


    Log.e(LOG_TAG,"mDMPush"+mDMPush);

    Log.e(LOG_TAG,"mDMPush outside if else "+mDMPush.size()+"   "+mDMPush.isEmpty());
            startService();



}

public static boolean isRunning() 
{ 
    return isRunning; 
} 

private void startService()
{        
   int delay = 100;
   int period =500;
final PackageManager pm = getPackageManager();

   timer.scheduleAtFixedRate(new TimerTask() {
       public void run() 
       {

        ActivityManager am = (ActivityManager) mContext.getSystemService(Activity.ACTIVITY_SERVICE);
        String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
        try {
                 ai = pm.getApplicationInfo(packageName, 0);
                 if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {


                       **Iam doing an action inside this timer using that arraylist mDMPush.. I ll add value to the arraylist once i received a push***              

                 }
           } catch (NameNotFoundException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }



       }
     }, delay, period);

}  
4

3 に答える 3

1

これは、配列リストを永続ストレージに保存する方法です

  Set<String> localStore = new HashSet<String>();
            List<String> list = new ArrayList<String>();
    localStore.addAll(list);
    SharedPreferences ssidPref = getSharedPreferences("ssidPref", Context.MODE_PRIVATE);
                SharedPreferences.Editor EDITIOR = ssidPref.edit();
                EDITIOR.putStringSet("ssidStored", localStore);
                EDITIOR.commit();

読む

localStore = ssidPref.getStringSet("ssidStored", null);
于 2013-03-08T05:47:20.050 に答える
0

このページを見て、配列リストのストレージを実装するためのより良い方法を見つける必要がありますAndroid Persistent Storage

于 2013-03-08T05:40:28.040 に答える
0

アプリケーション プロセスが強制終了され、再作成されているように見えますが、これは Android では正常なことです。静的な状態に依存しないでください。設定やデータベースなどのより永続的なストレージに保存してください。

于 2013-03-08T05:38:41.627 に答える