gpt4 book ai didi

java - Service 内部的 Handler 和 Thread 一直在运行,而 Service 似乎已经停止

转载 作者:太空狗 更新时间:2023-10-29 12:39:27 26 4
gpt4 key购买 nike

我有一个 Service,它使用 HandlerThread 每 5 秒运行一些代码。当我调用 stopSelf() 时,服务似乎已停止,因为从设备设置 -> 应用程序 -> 运行中它没有显示在那里。但是线程内的代码每 5 秒继续运行一次,尽管我已经停止了该服务。
为什么HandlerThread在服务停止的时候还活着?当服务停止时,如何停止 HandlerThread

final Handler h = new Handler();
final int delay = 5000; // milliseconds

h.postDelayed(new Runnable() {
public void run() {
// do something
final SharedPreferences sharedPref = getSharedPreferences(
getString(R.string.prefs), Context.MODE_PRIVATE);
if (sharedPref != null) {

new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE
Log.d("UPDATING"," something here");
isUpdated = updateToServer(data);
if(isUpdated) {
sharedPref.edit().putBoolean("updated",true).commit();
stopSelf();
}
}
}).start();
}
h.postDelayed(this, delay);
}
}, delay);

最佳答案

在发布Runnable之前,您应该验证isUpdated,如果isUpdated==true,则不要再次发布,代码如下:

final Handler h = new Handler();
final int delay = 5000; // milliseconds

h.postDelayed(new Runnable() {
public void run() {
// do something
final SharedPreferences sharedPref = getSharedPreferences(
getString(R.string.prefs), Context.MODE_PRIVATE);
if (sharedPref != null) {

new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE
Log.d("UPDATING"," something here");
isUpdated = updateToServer(data);
if(isUpdated) {
sharedPref.edit().putBoolean("updated",true).commit();
stopSelf();
}
}
}).start();
}
if(!isUpdated){
h.postDelayed(this, delay);
}

}
}, delay);

关于java - Service 内部的 Handler 和 Thread 一直在运行,而 Service 似乎已经停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28452295/

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