0

代码片段:

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. 
    }
};

设置 Handler post 延迟 10 秒后触发。如果我在 1 到 10 秒之间退出应用程序,则永远不会调用 run 方法。

请帮助我。

提前致谢。

4

2 回答 2

2

Android 运行时积极地管理进程的生命周期,在它们的入口点关闭时销毁进程(例如,当最后一个活动完成时)。话虽如此,我不知道上面的代码将在没有额外逻辑的情况下可靠地执行回调的任何执行环境。

如果您希望调用确定触发,您将需要向 Android 核心注册一个服务并使用服务线程的处理程序来安排调用。Android 将(通常)保持服务运行,稍后将触发您的调用。然后,您还应该在调用中取消注册服务以释放系统资源。

于 2015-05-23T15:17:22.407 回答
0

为了实现这一点,我使用了 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);
}

通过这种方式,无论用户是否使用主页、返回或从最近的应用程序中滑动关闭应用程序,我都能够重新启动服务,它停止工作的唯一方法是使用强制应用程序停止。

希望能帮助到你

于 2015-11-20T19:13:13.533 回答