サービス ファイル (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);
}