Служба Android продолжить после выключения - PullRequest
0 голосов
/ 22 марта 2012

У меня есть услуга 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 Ответ

2 голосов
/ 22 марта 2012

Вы не должны использовать поток сна для этого. Система быстро убьет ваш сервис (в относительном смысле, 24 часа - это долгое время, чтобы иметь одно и то же приложение в памяти). Вместо этого вы должны использовать AlarmManager и запросить, чтобы ваше приложение сработало, чтобы вы могли выполнять работу каждый день. При загрузке зарегистрируйте AlarmManager для выполнения работы каждые несколько дней. Кроме того, всякий раз, когда вы выполняете небольшую работу, сохраняйте, как долго вы работаете (возможно, в SharedPreferences), чтобы вы могли знать, что по истечении этого времени вы можете прекратить запрашивать обновления из AlarmManager. Это создаст вам дизайн, в котором ваше приложение может выйти из памяти и вымирать - безопасно избавляя вас от жалоб на убийство памяти - и затем снова работать, когда это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...