如何停止远程服务

Sun*_*hoo 2 service android process

我创建了一项服务和一项活动.在那个活动中,我有两个按钮.一个是开始服务而另一个是停止服务.我可以通过调用startService()但无法使用停止服务来启动远程活动stopService().如果我点击开始按钮,我发现额外的远程进程运行(使用eclipse ide).我期待如果我点击停止按钮,那么额外的过程会停止.但它没有发生.我能够成功调用启动和停止服务方法.为了验证代码,我在每个启动和停止方法中添加了一个Toast消息.如何停止远程服务?

我的活动

public class SimpleServiceController extends Activity {

       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            Button start = (Button)findViewById(R.id.serviceButton);
            Button stop = (Button)findViewById(R.id.cancelButton);

            start.setOnClickListener(startListener);
            stop.setOnClickListener(stopListener);

       }

       private OnClickListener startListener = new OnClickListener() {
        public void onClick(View v){
            startService(new Intent(SimpleServiceController.this,SimpleService.class));
        }               
       };

       private OnClickListener stopListener = new OnClickListener() {
            public void onClick(View v){
                stopService(new Intent(SimpleServiceController.this,SimpleService.class));
            }               
          };
}
Run Code Online (Sandbox Code Playgroud)

服务

public class SimpleService extends Service {

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "Service destroyed ...", Toast.LENGTH_LONG).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

表现

<service android:name=".SimpleService" android:process=":remote">
        </service>
Run Code Online (Sandbox Code Playgroud)

der*_*ann 6

在Android中,正在运行的服务和正在运行的进程之间存在重要区别.

服务遵循精心定义的生命周期 ; 它在onStartCommand()调用时开始,在onDestroy()完成后结束.在该生命周期中,服务可以执行任务或闲置,但它仍在运行.

一个进程可以超出服务寿命.如您所见,在您的服务停止后,该过程可以继续运行一段时间. 别担心.Android将破坏流程并在需要时准确回收任何资源.一开始肯定会让人感到困惑,但是一旦你的服务停止了,你就不需要关心它所处的过程了.

底线:如果onDestroy已被调用,则您的服务已停止.不要担心剩余的过程.