我在停止服务活动方面遇到了问题。
我的服务声明:
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"
/>
答案 0 :(得分:1)
您可以向您的服务添加BroadcastReceiver(或静态方法 - 具体取决于您的偏好),然后拨打Context.stopService()
或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);
方法中调用onStartCommand()
,在unregisterReceiver(stopReceiver);
中调用onDestroy()
。最后从您需要停止服务的任何地方发送广播:
Intent intent=new Intent();
intent.setAction(MyService.STOP_SERVICE);
sendBroadcast(intent);
如果你有一些线程,你必须先停止它们(可能你已经启动了服务粘性,是吗?)