我有一点问题.
在我的应用程序中,在用户成功登录后启动服务.以前,如果应用程序被杀,该服务需要停止.(比如,通过滑动从最近的应用程序列表中删除.)所以我们使用过android:stopWithTask="true".现在我们需要服务按原样运行,即使启动它的任务从最近的应用程序列表中删除.所以我把服务改为包含android:stopWithTask="false".但这似乎不起作用.
相关代码:
这是与服务相关的明显部分:
<service
android:enabled="true"
android:name=".MyService"
android:exported="false"
android:stopWithTask="false" />
Run Code Online (Sandbox Code Playgroud)
在MyService.java中:
public class MyService extends AbstractService {
@Override
public void onStartService() {
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new Notification(R.drawable.ic_launcher, "My network services", System.currentTimeMillis());
notification.setLatestEventInfo(this, "AppName", "Message", pendingIntent);
startForeground(MY_NOTIFICATION_ID, notification);
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Toast.makeText(getApplicationContext(), "onTaskRemoved called", Toast.LENGTH_LONG).show();
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
}
}
Run Code Online (Sandbox Code Playgroud)
AbstractService.java是扩展的自定义类Sevrice:
public abstract class …Run Code Online (Sandbox Code Playgroud) 如果用户正在运行我的应用程序并决定通过任务管理器将其终止,那么在进程终止之前是否有任何代码可以保证执行多少代码?
我觉得它可以停止在任意线上运行,但我想我真的不知道答案.
示例用例是用于停止和重新启动后台警报.如果我想取消闹钟,做一些工作,然后重置闹钟,我觉得应用程序有可能在"取消闹钟"步骤之后但在"重置闹钟"步骤之前停止运行.这会让我处于一种我不想进入的状态,因为我总是希望将来我的闹钟能够启动.(请记住,这只是一个例子,我不是在寻找这个特定情况的解决方法).
我能做些什么来确保代码我的java代码作为类似于db事务的"事务"运行,以便它可以全部运行还是不运行?
我有一个活动,显示通知栏上的通知.如果用户按下主页按钮进入后台,我会保留通知(这就是我需要的),但是当用户关闭应用程序时,我需要取消通知,这就是我的问题.
我怎么能处理这个?每当用户进入后台然后关闭应用程序时,我需要从通知栏中删除通知,但如果用户将应用程序保留在后台,我需要通知.
我希望在我的应用程序被杀死时执行一些操作.可以使用哪种方法?我正在使用Android 5.0.