我有服务InfoReceiver
。应用程序启动时此服务启动,并在应用程序关闭时仍然运行。此外,我已将应用程序添加到启动完成时启动。服务将每隔82毫秒(24小时)调用我想要的代码。我不知道如何在手机关机时进行线程休眠。另外我想在120小时后销毁完成的服务。
这是我的代码
提前谢谢!
InfoReceiver.java
public class InfoReceiver extends Service {
@Override
public void onCreate()
{
super.onCreate();
//do something code
}
}
MyBroadcastreceiver.java
public class MyBroadcastReceiver extends BroadcastReceiver {
private Context mContext;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
Calendar cal = Calendar.getInstance();
// add 5 minutes to the calendar object
cal.add(Calendar.SECOND, 84000);
Intent startServiceIntent = new Intent(context, InfoReceiver.class);
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startServiceIntent, 0);
AlarmManager am = (AlarmManager) mContext.getSystemService(mContext.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), startPIntent);
}
}
清单文件
<service android:name=".InfoReceiver"
android:enabled="true">
<intent-filter>
<action android:name=".InfoReceiver"/>
</intent-filter>
</service>
<receiver android:process=":remote" android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
答案 0 :(得分:2)
你不应该为此使用线程休眠。系统会迅速杀死你的服务(从相对意义上说,24小时是很长一段时间才能在内存中使用相同的应用程序)。相反,您应该使用AlarmManager并请求您的应用程序具有触发意图,以便您可以每天工作。在启动时,注册AlarmManager
每隔几天做一次工作。此外,每当你做一些工作时,保存你的时间(可能在SharedPreferences中),这样你就可以知道在那么多时间之后停止从AlarmManager请求更新。这将为您提供一个设计,让您的应用程序可能会耗尽内存并消失 - 安全地避免任何内存消除投诉 - 然后在必要时再次工作。