我想在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操作系统会杀死未使用的类,因为这是后台服务而不是活动。 我不知道。
答案 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分钟刷新一次来解决它。
因此,如果您偶尔安排一些活动来唤醒您的服务,它应该保持正常运行。
虽然可能有更好的解决方案。