0

我在从活动中停止服务时遇到问题。

我的服务声明:

public class MyService extends Service implements LocationListener { .. }

按下按钮时调用此服务:

public void startMyService(View view)
{
    ComponentName comp = new ComponentName(getPackageName(), MyService.class.getName());
    ComponentName service = startService(new Intent().setComponent(comp));
}

在另一种方法中(通过单击按钮启动)我想停止它:

public void stopMyService(View view)
{
    stopService(new Intent(this, MyService.class));
}

不幸的是,它不起作用。在我看来,这项服务已被另一项服务所取代。此外,它正在累积 - 例如,当我第二次启动服务时,其中有两个正在运行等。有人可以帮助我吗?在此先感谢您的帮助。

更新:Android Manifest(仅限我的服务):

<service android:name=".MyService" 
        android:enabled="true" 
        android:exported="false"
        android:label="LocationTrackingService" 
        />
4

1 回答 1

1

您可以将 BroadcastReceiver 添加到您的服务(或静态方法 - 取决于您的偏好)并调用Context.stopService()or stopSelf(),例如添加 ...

public static String STOP_SERVICE = "com.company.SEND_STOP_SERVICE";

private final BroadcastReceiver stopReceiver = new BroadcastReceiver() {
   @Override
   public void onReceive(Context context, Intent intent) {
      if(intent.getAction().equals(STOP_SERVICE)){
          MyService.this.stopSelf();
      }
   }
};

...为您的服务(假设它被称为MyService)。然后调用方法和registerReceiver(stopReceiver, STOP_SERVICE);in 。最后从您需要停止服务的任何地方发送广播:onStartCommand()unregisterReceiver(stopReceiver);onDestroy()

Intent intent=new Intent();
intent.setAction(MyService.STOP_SERVICE);
sendBroadcast(intent);

如果你有一些线程,你必须先停止它们(可能你有并且你启动了粘性服务,是吗?)

于 2013-03-24T20:32:09.650 回答