Запуск службы из app start, а не активность

Я хочу запустить Service когда приложение запускается вместо активности; а затем эта служба будет запущена an Activity. Мне нужно это сделать, потому что мое приложение должно работать всегда, и когда я говорю всегда, я имею в виду всегда. И единственный способ, которым мне удалось избежать ОС, убив мое приложение, - это запустить службу как липкую, и если Android убьет либо мою активность, либо мою службу, я перезапущу их сразу.

Я нашел это вопрос но верхний ответ у кого-нибудь есть идея получше?

PS: Я знаю, что это не похоже на очень дружественное приложение, но это очень конкретный сценарий исследования, и он не предназначен для обычных пользователей, т. е. телефон используется исключительно для этой цели; но даже если память посвящена моему приложению Android продолжает убивать его время от времени... Сомнения были о предполагаемой жесткие схемы управления памятью андроида уже нет.

1 ответов


В общем активность не должна показывать какой - либо пользовательский интерфейс-обычно это так, но это не обязательно. Таким образом, вы можете просто установить отправную точку приложения для вашей "невидимой" деятельности. И невидимый означает либо тематические как

android:theme="@android:style/Theme.NoDisplay"

или просто ваш код не будет делать каких-либо setContentView() и как только это будет сделано в вашем onCreate(), вы начинаете другое действие и заканчиваете это с finish() - и никакой пользовательский интерфейс не появится из этой деятельности-таким образом, вы можете легко извлечь выгоду из этого ваша работа в подклассе activity (что может быть проще для некоторых задач) и по-прежнему не требует пользовательского интерфейса:

public void onCreate(Bundle bundle) {
   super.onCreate(bundle);

   // [... do your job here...]

   // we're done, so let's jump to another acitivity
   // this can be skipped if you do not want to jump anywhere

   Intenet intent = new Intent(....)
   ...

   try {
      startActivity( intent );

      // finish him
      finish();

   } catch ( Exception e ) {
      e.printStackTrace();
   }

}