1

我想为体育网络服务编写某种后台实时报价器应用程序......我希望我的应用程序能够一直调用 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);
        }
    }
}
4

1 回答 1

1

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

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

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

但是每天晚上服务都会被终止并且永远不会再被调用

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

清单条目:

<receiver>是毫无意义的,因为您无法ACTION_TIME_TICK通过 manifest注册。

于 2013-10-07T13:04:58.900 回答