1

当我在 Gmail 客户端中收到电子邮件时,我想在 GmailService 类中运行 CippaLippa() 方法。

我在 AndroidManifest 中有一个接收器和一个服务...

    <receiver
        android:name="com.myapp.receiver.GmailReceiver">
        <intent-filter>
            <action
                android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

    <service
        android:name="com.myapp.service.GmailService"
        android:label="@string/app_name" />

而这些课程...

public class GmailReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, final Intent intent) {


        final SharedPreferences preferences = context.getSharedPreferences("myapp.prefs", 0);

        context.startService(new Intent(context, GmailService.class));
    }
}


public class GmailService extends Service { .. etc...}

我的问题:在几个小时内一切正常,当我收到来自 Gmail 的通知时,CippaLippa() 方法会触发......然后,几个小时后,当我收到 gmail 通知时,CippaLippa() 方法不再触发。

也许,有一种方法可以告诉 GmailService 类“保持活力”并继续监视 Gmail 事件?我认为这不是由于 Android OS 杀死了未使用的类,因为那是后台服务而不是 Activity。我不知道。

4

3 回答 3

1

以下代码将立即启动警报管理器(触发 PendingIntent)并每 60 秒运行一次任务。

    Intent logReader = new Intent();
    logReader.setClassName("com.foo.Test", "com.foo.Test.MyServiceClass");
    logReaderPI = PendingIntent.getService(context, 0, logReader, 0);
    long firstTime = SystemClock.elapsedRealtime();
    AlarmManager aMgr =  (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    aMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 60 * 1000, logReaderPI);
于 2011-04-05T15:26:07.710 回答
0

看看START_STICKY。我不确定这是否会完全奏效,但它可能有助于保持您的服务继续进行。

于 2011-04-05T07:00:18.940 回答
0

您对系统终止服务的看法是正确的。我在与小部件关联的服务方面遇到了同样的问题。我通过让它每 30 分钟左右刷新一次来解决它。

因此,如果您偶尔安排一些事件来唤醒您的服务,它应该保持正常运行。

不过可能有更好的解决方案。

于 2011-04-05T07:00:26.067 回答