我想知道服务是否从特定活动终止,所以我在调用stopServivce(service)时从该活动传递一个字符串.
这是代码:
Intent service = new Intent(Activity.this,service.class); service.putExtra("terminate","activity terminated service"); stopService(service);
但我似乎可以使用getIntent().getExtras().getString(“terminate);在onDestroy()方法中访问此变量.
[编辑]
我找到了绕过这个障碍的方法,但我仍然希望我的问题得到解答.我只是在活动中的onDestroy()方法中做了我必须做的事情,然后调用了stopService(service).我很幸运,我的情况不需要更复杂的事情.
解决方法
无法访问onDestroy中的Intent.您必须以其他方式发出信号(Binder,共享首选项,本地广播,全局数据或Messenger).在
this answer中给出了一个使用广播的好例子.您也可以通过调用startService而不是stopService来使其工作. startService仅在尚未存在的情况下启动新服务,因此对startService的多次调用是将Intent发送到服务的机制.你看到这个技巧是由broadcastReceivers使用的.由于您可以访问onStartCommand中的Intent,因此您可以通过检查Intent extras并在指示终止时调用stopSelf来实现终止.这是一个动态的草图 –
public int onStartCommand(Intent intent,int flags,int startId) { final String terminate = intent.getStringExtra("terminate"); if(terminate != null) { // ... do shutdown stuff stopSelf(); } return START_STICKY; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。