另请参阅编辑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
?如果是,那么使用哪个ServiceConnection
和public 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}}
非常感谢这里的一些指导/帮助,它已经开始做我的头了,谢谢
答案 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) {
制作一些变量以检查是否应该停止服务。