关机后android服务继续

时间:2012-03-22 18:28:23

标签: java android loops service

我有服务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>

1 个答案:

答案 0 :(得分:2)

你不应该为此使用线程休眠。系统会迅速杀死你的服务(从相对意义上说,24小时是很长一段时间才能在内存中使用相同的应用程序)。相反,您应该使用AlarmManager并请求您的应用程序具有触发意图,以便您可以每天工作。在启动时,注册AlarmManager每隔几天做一次工作。此外,每当你做一些工作时,保存你的时间(可能在SharedPreferences中),这样你就可以知道在那么多时间之后停止从AlarmManager请求更新。这将为您提供一个设计,让您的应用程序可能会耗尽内存并消失 - 安全地避免任何内存消除投诉 - 然后在必要时再次工作。