BroadcastReceiver (TIME_TICK) dies every night?

2019-02-16 02:09发布

问题:

I want to write some kind of background-live-ticker app for sports-web-services... I would like my app to be able to call the TIME_TICK all the time.

Btw: I also tried to use the AlarmManager, but the problem is the same.

But now my problem...

I use a Receiver with a Service for the execution part. The Receiver is called every minute correctly after register. But every night the service is terminated and will never be called again.

On Android 2.x everything works fine but Android 4.x will stop the Receiver every day... Is there any posibility to keep the app alive on Android 4.x?

The Reveiver is registered in my Main-Activity:

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

Manifest-entries:

<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>

Receiver-class:

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

回答1:

I also tried to use the AlarmManager, but the problem is the same

AlarmManager is a far better answer than ACTION_TIME_TICK, particularly if you let the user configure the polling frequency (including an option for "never poll, please, as I like my battery and bandwidth usage to stay low").

Please feel free to ask a separate StackOverflow question regarding whatever problems you feel your are experiencing with it.

But every night the service is terminated and will never be called again

Android can and will terminate your process at any point, either by user request or due to old age.

Manifest-entries:

The <receiver> is pointless, as you cannot register for ACTION_TIME_TICK via the manifest.