В моем приложении мне нужно отправить текстовое сообщение пользователю через определенный интервал. Для этого мне нужно запустить код отправки сообщения в фоновом режиме. Я использую диспетчер аварийных сигналов, чтобы начать работу в определенное время. Что делать? Есть ли другой способ сделать это?
Как запустить активность в фоновом режиме на Android
Ответ 1
Вы можете изучить Services, которые в основном являются объектами без интерфейса.
Ответ 2
Для тех, кто хочет сделать это с помощью Activity, а не с помощью службы (могут быть ситуации, когда это необходимо), я сделал это, начав Activity обычным способом, а затем в Activity onCreate, который я отправил на заднем плане, вызывая moveTaskToBack (true).
См. Отправка запущенного приложения в фоновом режиме программно
Если вы используете этот метод, вы должны добавить дополнительную информацию о намерении, с помощью которого вы начинаете действие, чтобы он знал в onCreate, что он должен отправить себя на задний план. Вы делаете это, вызывая метод Intent putExtra. В Activity onCreate вы получаете Calling Intent с getIntent, а затем извлекаете информацию, которую вы там помещаете с помощью getStringExtra, например (я использовал дополнительную информацию о строке). См. Документацию для класса Intent.
Ответ 3
yes.you должен использовать Service для достижения этого. Они могут работать в фоновом режиме до явно закрытого. IntentService - еще одна альтернатива
http://developer.android.com/guide/topics/fundamentals/services.html
Ответ 4
Это может помочь. Добавьте это в манифест андроида..:
использует-разрешение android: name= "android.permission.ACCESS_BACKGROUND_SERVICE"
Также используйте AsyncClass для ваших длинных/фоновых процессов. Подобно этому.
http://developer.android.com/reference/android/os/AsyncTask.html
Ответ 5
Для достижения этой цели рекомендуется использовать Сервис, но я столкнулся с подобной ситуацией, когда вам нужно что-то из другого приложения, и намерение службы не было экспортировано, поэтому единственный способ запустить службу - начать работу - и чтобы пользователь в моем приложении мне нужно было сохранить активность на переднем плане.
В этом случае можно запустить другое действие в 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();