成为空我已经声明了一个服务文件(backgroundService.java)内的静态的ArrayList变量。一旦我收到推送消息(使用GCM),我正在更新静态变量。我正在使用4.0.4设备(三星S3)..静态变量变空,一旦我的应用程序去背景,然后如果我长按memu按钮,并刷我的应用程序(一旦我们刷卡的应用程序正在完成,但不是强制停止),服务暂停一段时间,然后再次启动,即不调用服务onDestroy方法,而是OnCreate方法在该暂停后。暂停后,静态ArrayList变为空。如何解决它?我不希望我的静态ArrayList中失去它的价值。只有4.0+设备在Android的版本出现安卓:静态的ArrayList在服务
此问题。
public class BackgroundService extends Service
private Timer timer = new Timer();
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);
}
为什么要使用一个静态的? – smk 2013-03-08 05:36:44
发布你的活动代码与静态arraylist声明和使用。 – Prateek 2013-03-08 05:38:56
因为基于静态arraylist值,我在后台做了一个动作。 – Sudarshan 2013-03-08 05:40:04