服务工作几个小时,而不是更多的响应

时间:2011-04-05 06:57:37

标签: android service ondestroy

我想在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操作系统会杀死未使用的类,因为这是后台服务而不是活动。 我不知道。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

看看START_STICKY。我不确定这是否完全可以解决问题,但它可能有助于保持您的服务。

答案 2 :(得分:0)

你对系统查杀服务是正确的。我对与小部件相关联的服务有同样的问题。 我通过每30分钟刷新一次来解决它。

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

虽然可能有更好的解决方案。