我正在通过其中的服务和异步任务运行后台任务。首先它从数据库中获取所有数据并在用户更改某些选项时开始运行,然后再次启动服务以处理新数据,但不幸的是服务从它停止的地方运行。所以我想开始全新的服务。我尝试了START_NOT_STICKY
但没有用。
public class MyService extends Service {
public void onCreate(){
super.onCreate();
}
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle extras = intent.getExtras();
process.execute();
return START_NOT_STICKY;
}
public void onDestroy() {
stopSelf();
super.onDestroy();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
class ProcessImageAsync extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
// here im getting content from db and processing .
if (isCancelled()) {
System.exit(0);
}
}
}
}
我的活动代码是我重启服务的方式
public void startServiceFucntion(int type){
if(isMyServiceRunning(MyService.class)){
if (type == 1){
Intent serviceIntent = new Intent(this, MyService.class);
stopService(serviceIntent);
startServiceFucntion(0);
}
} else {
Intent serviceIntent = new Intent(this, MyService.class);
if(serviceReceiver == null){
registerReceiver(serviceReceiver, intentSFilter);
}
startService(serviceIntent);
}
}
答案 0 :(得分:1)
我认为您没有正确停止服务,您的异步任务会继续在后台运行。你也需要取消你的asynctask来销毁你的服务。
答案 1 :(得分:1)
您不会停止服务属性。我认为您可以在 AndroidManifest.xml 中注册广播以重新启动服务或销毁该服务。
答案 2 :(得分:1)
服务是在后台运行以执行的组件 长时间运行的操作,无需与用户交互 即使应用程序被破坏,它也能正常工作。
AsyncTask可以正确,轻松地使用UI线程。这个班 允许执行后台操作并在UI上发布结果 线程,而不必操纵线程和/或处理程序。
因此您无法停止服务,因为 AsyncTask 一直在运行。