Как запустить активность в фоновом режиме на Android

В моем приложении мне нужно отправить текстовое сообщение пользователю через определенный интервал. Для этого мне нужно запустить код отправки сообщения в фоновом режиме. Я использую диспетчер аварийных сигналов для запуска активности в определенное время. Что делать? Есть ли другой способ сделать это?

Вы можете посмотреть на Службы, которые в основном работают с UI-less.

Yes.you должен использовать Service для достижения этого. Они могут работать в фоновом режиме до явно закрытого. IntentService – еще одна альтернатива

http://developer.android.com/guide/topics/fundamentals/services.html

Это может помочь .. Добавьте это в манифест андроида ..:

Use-permission android: name = "android.permission.ACCESS_BACKGROUND_SERVICE"

Также используйте AsyncClass для ваших длинных / фоновых процессов.

http://developer.android.com/reference/android/os/AsyncTask.html

Для тех, кто хочет сделать это с помощью Activity, а не с помощью службы (могут быть ситуации, когда это необходимо), я сделал это, начав Activity обычным способом, а затем в onCreate Activity я отправил его на Фона, вызвав moveTaskToBack (true).

См. « Отправка запущенного приложения на задний план»

Если вы используете этот метод, вы должны добавить дополнительную информацию о намерении, с помощью которого вы начинаете действие, чтобы он знал в onCreate, что он должен отправить себя на задний план. Вы делаете это, вызывая метод putExtra Intent. В ActivityCreate Activity вы получаете Calling Intent с getIntent, а затем извлекаете информацию, которую вы там помещаете с помощью getStringExtra, например (я использовал дополнительную информацию о строке). См. Документацию для класса Intent.

Рекомендуется использовать Service s для достижения этой цели, но я столкнулся с подобной ситуацией, когда вам нужно что-то из другого приложения, – и намерение службы не было экспортировано, поэтому единственный способ запустить службу – начать Активность – и чтобы пользователь в моем приложении мне нужно было сохранить активность на переднем плане. В этом случае можно запустить другое действие в AsyncTask , а затем в onPostExecute перезапустить сам.

  (new AsyncTask<Void, Void, Void>() { boolean starting = false; @Override protected Void doInBackground(Void... params) { if(!externalServiceRunning()){ Intent externalIntent = getPackageManager().getLaunchIntentForPackage("com.external..."); if (externalIntent != null) { starting = true; startActivity(externalIntent); } } return null; } @Override protected void onPostExecute(Void aVoid) { if(starting) { Intent myApp = getPackageManager().getLaunchIntentForPackage("com.my.myapp"); if (myApp != null) { startActivity(myApp); } } } }).execute();