gpt4 book ai didi

Android:静态数组列表在服务中变得空洞

转载 作者:行者123 更新时间:2023-11-29 01:55:42 28 4
gpt4 key购买 nike

我在服务文件 (backgroundService.java) 中声明了一个 static Arraylist 变量。一旦收到推送消息(使用 GCM),我就会更新静态变量。我正在使用 4.0.4 设备(三星 S3)。静态变量变为空,一旦我的应用程序进入后台,然后如果我长按 memu 按钮并滑动我的应用程序(一旦我们滑动应用程序完成但不会强制停止), 服务暂停一段时间然后再次启动,即服务 onDestroy 方法没有被调用,而是在暂停之后调用 OnCreate 方法。暂停之后静态 ArrayList 变为空。如何解决?我不想让我的静态 Arraylist 失去它的值(value)..

此问题仅出现在 Android 4.0+ 版本的设备中。

public class BackgroundService extends Service 

{ 私有(private)定时器定时器=新定时器();

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);

}

最佳答案

这就是你必须如何在持久性存储中保存数组列表

  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);

关于Android:静态数组列表在服务中变得空洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15287409/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com