【问题标题】:How to stop remote service如何停止远程服务
【发布时间】:2011-08-09 10:12:53
【问题描述】:

我创建了一个服务和一个活动。在那个活动中,我有两个按钮。一种是启动服务,另一种是停止服务。我可以通过调用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));
            }               
          };
}

服务

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

清单

<service android:name=".SimpleService" android:process=":remote">
        </service>

【问题讨论】:

    标签: android service process


    【解决方案1】:

    在 Android 中,运行中的服务和运行中的进程之间有一个重要的区别。

    服务跟随carefully defined lifecycle;它在onStartCommand() 被调用时开始,在onDestroy() 完成后结束。在该生命周期内,服务可能正在执行任务或处于空闲状态,但它仍在运行。

    流程可以延伸到服务的生命周期之外。如您所见,该进程可以在您的服务停止后继续运行一段时间。 别担心。 Android 将在需要时销毁该进程并回收任何资源。一开始肯定会让人困惑,但是一旦你的服务停止了,你就不需要关心它所处的进程了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多