【问题标题】:BroadcastReceiver (TIME_TICK) dies every night?BroadcastReceiver (TIME_TICK) 每晚都死机?
【发布时间】:2013-10-07 12:26:58
【问题描述】:

我想为体育网络服务编写某种后台实时报价应用程序... 我希望我的应用能够一直调用 TIME_TICK。

顺便说一句:我也尝试使用AlarmManager,但问题是一样的。

但现在我的问题...

我在执行部分使用带有服务的接收器。 注册后每分钟正确调用接收器。 但是每天晚上服务都会被终止,并且永远不会再被调用。

在 Android 2.x 上一切正常,但 Android 4.x 每天都会停止接收器... 是否有任何可能让应用程序在 Android 4.x 上保持活力?

Revever 已在我的 Main-Activity 中注册:

registerReceiver(new MyReceiver(), new IntentFilter(Intent.ACTION_TIME_TICK));

清单条目:

<service android:name="de.pepdev.MyService" />
<receiver android:name="de.pepdev.MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.TIME_TICK" />
    </intent-filter>
</receiver>

接收者等级:

public class MyReceiver extends BroadcastReceiver
{
    public static   long        nextExecTime    = 0;
    public static   Calendar    currentTime     = Calendar.getInstance();

    @Override
    public void onReceive(Context context, Intent intent)
    {
        currentTime = Calendar.getInstance();

        if(nextExecTime <= currentTime.getTimeInMillis())
        {
            Intent service = new Intent(context, MyService.class);
            context.startService(service);
        }
    }
}

【问题讨论】:

  • 你能把日志贴在这里吗?你知道服务被终止的原因吗?
  • 感谢您的帮助,但日志什么也没说。该服务被调用了几次,到晚上 logcat 没有我的应用程序的任何进一步条目。最后一个循环成功完成。像alarmmanage这样的系统消息也没有抛出任何东西。

标签: java android time broadcastreceiver alarmmanager


【解决方案1】:

我也尝试使用AlarmManager,但问题是一样的

AlarmManager 是比ACTION_TIME_TICK 更好的答案,特别是如果您让用户配置轮询频率(包括“请不要轮询,因为我喜欢我的电池和带宽使用保持低”的选项) .

请随时就您遇到的任何问题提出单独的 StackOverflow 问题。

但是每天晚上服务都会被终止,再也不会被调用

Android 可以并且将在任何时候终止您的进程,无论是根据用户请求还是由于年老。

清单条目:

&lt;receiver&gt; 毫无意义,就像you cannot register for ACTION_TIME_TICK via the manifest

【讨论】:

  • 谢谢。我认为 AlarmManager 更好。我希望用户配置应用程序应该在后台运行的时间。但是有没有可能让应用程序保持活动状态并避免 android 终止它?
  • @user2854483:保留进程是 Android 上的反模式。请使用AlarmManager 并允许您的进程在用户定义的轮询周期的检查之间离开。
  • 这个想法是,用户配置例如足球比赛或比赛的一些时间范围,这在未来的某个日子。我想自动运行后台进程。但经过超过 24 小时的时间后,该应用程序“死机”并且没有接收到任何接收器。我可以将应用程序设置为睡眠或停止,但是否无法“重新激活”应用程序?
  • @user2854483:这就是AlarmManager 的用途。您不需要让您的应用程序持续运行。 AlarmManager 将在您指定的时间为您的应用提供控制权(例如,“某些时间范围......未来的某些日子”)。
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2013-11-21
  • 2020-02-08
  • 1970-01-01
相关资源
最近更新 更多