我在使用服务时遇到问题。
我正在尝试将后台服务用于永久运行。我已经用var resultado;
function num_2(repet){
for (var i = 0; i > repet-1; i++) {
if (i>=1) {
return i + ", ";
}else{
return i;
}
}
}
function sumarr(a,b,c){
if (a!="" && a!=null) {
resultado = a+b+c;
return "\n" + "resul: " + resultado + '\n' + "1: " +
a + '\n' + "2: " + b + '\n' + "3: " + c + '\n' + '\n';
}else{
return "noting";
}
}
console.log("\n" + "callback 2: " + sumarr(num_2(3)));
实现了。因此,当应用关闭时,将以服务的AlarmManager
方法发送广播。并且在警报接收器中,可以开始服务。
OnDestroy()
但是,如果我从最近的应用程序列表中删除(滑动)该应用程序,则不会调用服务的OnDestroy()或OnTaskRemoved。所以不能调用AlarmManager。
以下是我的Manifest.xml:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
serviceInstance = this;
callHelper = new CallHelper(this);
callHelper.start();
return START_STICKY;
}
@Override
public void onDestroy() {
Log.d("1111111111", "stop service");
super.onDestroy();
setAlarmTimer();
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.d("1111111111", "stop remove");
super.onTaskRemoved(rootIntent);
}
protected void setAlarmTimer() {
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.add(Calendar.SECOND, 1);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0,intent,0);
AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), sender);
}
从最近的应用列表中删除应用时,如何调用服务的<service
android:name=".service.CallTrackService"
android:enabled="true"
android:exported="true"
android:stopWithTask="false"/>
或OnDestory()
方法?
任何知道此问题的人,然后请提供解决方案。
答案 0 :(得分:0)
你不知道。该框架可以。当不再绑定任何绑定服务时,该绑定服务将被销毁。当启动的服务明确停止或系统需要资源时,该服务将被销毁。要显式停止服务,请从任何上下文调用stopService,或从服务调用stopSelf。
但是“我正在尝试将后台服务永久使用。”。在现代Android中无法实现。系统将清理您的资源。没有办法使其永久运行,甚至无法通过警报伪造永久运行。无论您希望服务实际执行什么操作,都需要找到另一种方法。
答案 1 :(得分:0)
Service类具有onTaskRemoved()
方法,当该应用程序从最近的应用程序中删除时会触发该方法。
服务可以在那里呼叫stopSelf()
来自行关闭。
如:
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
stopSelf();
}
修改
在android Oreo中,以这种方式启动服务:
startForegroundService(new Intent(context, your_service.class));