在 android 中退出应用程序时,在给定的延迟间隔后不会触发处理程序 postdelayed?
Handler postdelayed is not fired after given delay interval when quitting the app in android?
代码段:
Handler handler= new Handler();
handler.postDelayed(networkRunnable,
10000);
/**
* A runnable will be called after the 10 second interval
*/
Runnable networkRunnable= new Runnable() {
@Override
public void run() {
//Not fired if I quit the app before 10 seconds after 1 second.
}
};
设置处理程序 post 延迟 10 秒后触发。如果我在 1 到 10 秒之间退出应用程序,则 运行 方法永远不会调用。
请帮我解决这个问题。
提前致谢。
Android 运行时积极管理进程生命周期,在进程入口点关闭时销毁进程(例如,当最后一个 activity 完成时)。话虽如此,我不知道上面的代码在没有其他逻辑的情况下可靠地执行回调的任何执行环境。
如果您确实希望调出触发,您需要向 Android 核心注册一个服务,并使用服务线程的处理程序来安排调出。 Android 将(通常)保留服务 运行 并且稍后将触发您的呼叫。然后,您还应该取消注册标注中的服务以释放系统资源。
为了实现这一点,我使用了 AlarmManager 而不是处理程序,它现在可以工作了,这是我正在使用的代码的摘录:
@Override
protected void onHandleIntent(Intent intent) {
Log.d(Constants.TAG, "onHandleIntent");
...
restartService();
Log.d(Constants.TAG, "finish");
}
private void restartService() {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent queryIntent = new Intent(context, ServiceClass.class);
PendingIntent pendingQueryIntent = PendingIntent.getService(context, 0, queryIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
// schedule the intent for future delivery
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + Constants.RESTART_TIME, pendingQueryIntent);
}
通过这种方式,无论用户是使用主屏幕、后退还是从最近的应用程序中滑动关闭应用程序,我都可以重新启动服务,它停止工作的唯一方法是使用强制应用程序停止。
希望对您有所帮助
代码段:
Handler handler= new Handler();
handler.postDelayed(networkRunnable,
10000);
/**
* A runnable will be called after the 10 second interval
*/
Runnable networkRunnable= new Runnable() {
@Override
public void run() {
//Not fired if I quit the app before 10 seconds after 1 second.
}
};
设置处理程序 post 延迟 10 秒后触发。如果我在 1 到 10 秒之间退出应用程序,则 运行 方法永远不会调用。
请帮我解决这个问题。
提前致谢。
Android 运行时积极管理进程生命周期,在进程入口点关闭时销毁进程(例如,当最后一个 activity 完成时)。话虽如此,我不知道上面的代码在没有其他逻辑的情况下可靠地执行回调的任何执行环境。
如果您确实希望调出触发,您需要向 Android 核心注册一个服务,并使用服务线程的处理程序来安排调出。 Android 将(通常)保留服务 运行 并且稍后将触发您的呼叫。然后,您还应该取消注册标注中的服务以释放系统资源。
为了实现这一点,我使用了 AlarmManager 而不是处理程序,它现在可以工作了,这是我正在使用的代码的摘录:
@Override
protected void onHandleIntent(Intent intent) {
Log.d(Constants.TAG, "onHandleIntent");
...
restartService();
Log.d(Constants.TAG, "finish");
}
private void restartService() {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent queryIntent = new Intent(context, ServiceClass.class);
PendingIntent pendingQueryIntent = PendingIntent.getService(context, 0, queryIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
// schedule the intent for future delivery
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + Constants.RESTART_TIME, pendingQueryIntent);
}
通过这种方式,无论用户是使用主屏幕、后退还是从最近的应用程序中滑动关闭应用程序,我都可以重新启动服务,它停止工作的唯一方法是使用强制应用程序停止。
希望对您有所帮助