我可以在android中重新启动服务吗?

时间:2016-03-05 05:13:21

标签: android android-asynctask android-service

我正在通过其中的服务和异步任务运行后台任务。首先它从数据库中获取所有数据并在用户更改某些选项时开始运行,然后再次启动服务以处理新数据,但不幸的是服务从它停止的地方运行。所以我想开始全新的服务。我尝试了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);
        }
}

3 个答案:

答案 0 :(得分:1)

我认为您没有正确停止服务,您的异步任务会继续在后台运行。你也需要取消你的asynctask来销毁你的服务。

答案 1 :(得分:1)

您不会停止服务属性。我认为您可以在 AndroidManifest.xml 中注册广播以重新启动服务或销毁该服务。

答案 2 :(得分:1)

  

服务是在后台运行以执行的组件   长时间运行的操作,无需与用户交互   即使应用程序被破坏,它也能正常工作。

     

AsyncTask可以正确,轻松地使用UI线程。这个班   允许执行后台操作并在UI上发布结果   线程,而不必操纵线程和/或处理程序。

因此您无法停止服务,因为 AsyncTask 一直在运行。