如何停止我的服务?

时间:2014-08-08 18:16:29

标签: java android android-service

另请参阅编辑2(下文)

我已延长NotificationListenerService并实施了多种方法,包括onDestroy()方法(但不是onBind()onStartCommand()方法,因为我不需要据我所知,他们。但是,当我致电selfStop() onDestroy()时,我们没有打电话。

我知道还有其他关于致电selfStop()的链接,但我找不到解决问题的方法。

我的服务由系统使用android-manifest中的以下代码启动:

<service android:name=".NotificationListener"
          android:label="@string/service_name"
          android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
     <intent-filter>
         <action android:name="android.service.notification.NotificationListenerService" />
     </intent-filter>
</service>

同样,当我尝试在stopSelf()方法中调用onCreate()时(如果符合某些条件),onDestroy()方法未被调用...服务不是&# 39; t被毁。

它一直在使用RAM(我知道它正在运行,因为我可以在设置下看到它 - &gt;应用程序 - &gt;运行(在我的智能手机上))

有谁知道为什么stopSelf()可能无法执行/运行?我是否必须在onBind()方法中执行某些操作(例如,更改返回的常量)? 甚至可以阻止service extends NotificationListenerService unbind(),以便它在系统再次调用之前不会运行? 在致电stopSelf()之前,我是否必须致电Context?如果是,那么使用哪个ServiceConnectionpublic class Core extends NotificationListenerService { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.i("abc", "onCreateService"); prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); //check main switch state: check = prefs.getBoolean("mainswitch", true); Toast.makeText(Core.this, Boolean.toString(check), Toast.LENGTH_SHORT).show(); Log.i("abc", Boolean.toString(check)); if(check == false){ stopSelf(); } } @Override public void onNotificationPosted(StatusBarNotification sbn){} @Override public void onNotificationRemoved(StatusBarNotification sbn){} @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i("abc", "onDestroyService"); } }

修改1

这是我的代码:

NotificationListenerService

修改2

如果我在销毁扩展service(见上文)的服务时遇到问题,那么创建第二个NotificationListenerService(例如MirrorClass)是否明智地反映了NotificationListenerService?然后我会从扩展destroy的实际服务中引用该类及其方法。据推测,NotificationListenerService会更容易,因为我是启动它的人(不像扩展public class Core extends NotificationListenerService { @Override public void onCreate() { // TODO Auto-generated method stub } @Override public void onNotificationPosted(StatusBarNotification sbn){ MirrorClass.mOnNotificationPosted(sbn) //This is the reference to the other class } @Override public void onNotificationRemoved(StatusBarNotification sbn){} 的服务,它是由android系统本身启动/调用的)

这样的事情:

{{1}}

非常感谢这里的一些指导/帮助,它已经开始做我的头了,谢谢

3 个答案:

答案 0 :(得分:0)

尝试使用onStartCommand()标记覆盖服务中的START_NOT_STICKY

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);
    return START_NOT_STICKY;
}

答案 1 :(得分:0)

创建一项新服务,为您完成所有工作,而不是在扩展NotificationListenerService的此服务中完成工作。一旦你想做一些工作,你所做的只是使用startService()方法,并且可能你会发送一些extras,其中intent包含已发布的通知。 然后很容易使用NotificationListenerService方法停止该服务(为您完成工作并且不会扩展stopSelf())。 使用NotificationListenerService方法停止stopSelf()本身并不起作用。

答案 2 :(得分:0)

发出命令

stopSelf();

public int onStartCommand(Intent intent, int flags, int startId) {

制作一些变量以检查是否应该停止服务。