2015-10-25 4 views

ответ

0

Вы можете использовать метод onDestoy() вашей деятельности.

+0

Пробовал использовать onDestroy(), но он не работает, я должен захватить приложение, получающее событие kill ... –

+0

Затем вы должны попробовать создать отдельное приложение-приложение, которое будет захватывать это событие. – Tony

+0

Спасибо! Эта проблема была решена путем создания сценария оболочки, который будет работать в фоновом режиме и будет отслеживать статус процесса приложения. После того, как процесс поиска будет отсутствовать, он вызовет задачу, которая должна быть завершена. –

4

Ключ этого вопроса состоит в том, что:

вы должны понять, ваше приложение может ли получить какие-либо дополнительные функции обратного вызова когда приложение погибают в любых видах ситуации.

Следующий ответ ответил Devunwired в этом вопросе:

Android app doens't call "onDestroy()" when killed (ICS)

Это поможет вам больше, чтобы понять это.


Ваше приложение не будет получать какие-либо дополнительные функции обратного вызова, если процесс завершается его внешними средствами (т.е. убиты по причинам памяти или пользователь Сила останавливает приложение). Вам нужно будет выполнить обратные вызовы, которые вы получили, когда приложение зашло в фоновое окно для очистки вашего приложения.

finish() вызывается системой только в том случае, если пользователь нажимает кнопку «НАЗАД» из вашей операции, хотя она часто вызывается непосредственно приложениями для выхода из режима «Активность» и возврата к предыдущей. Это не технически обратный вызов жизненного цикла.

onDestroy() получает только вызов в результате вызова finish(), поэтому, главным образом, только когда пользователь нажимает кнопку BACK. Когда пользователь нажимает кнопку «ДОМ», активность переднего плана проходит только через onPause() и onStop().

Это означает, что Android не обеспечивает большую обратную связь с Activity, чтобы дифференцировать пользователя, идущего домой, или переход на другую активность (из вашего приложения или любого другого); сама деятельность просто знает, что она больше не находится на переднем плане. Приложение для Android представляет собой более свободную коллекцию видов деятельности, чем плотная интегрированная уникальная концепция (например, вы можете использовать ее на других платформах), поэтому нет реальных системных обратных вызовов, чтобы знать, когда приложение в целом было перенесено или движется назад.

В конечном счете, я настоятельно призываю вас пересмотреть архитектуру приложения, если она опирается на знание того, является ли ЛЮБАЯ деятельность в вашем приложении на переднем плане, но в зависимости от ваших потребностей могут быть другие способы, более дружественные к структуре выполните это. Один из вариантов заключается в том, чтобы связать Service внутри вашего приложения, к которому привязывается каждый Activity, пока он активен (то есть между onStart() и onStop()). Это дает вам возможность использовать тот факт, что связанный Service живет только до тех пор, пока клиенты привязаны к нему, поэтому вы можете контролировать методы onCreate() и onDestroy()службы, чтобы знать, когда текущая задача переднего плана не является частью вашей заявки.

Вы также можете найти this article, написанный Dianne Hackborn, чтобы быть интересным, охватывающим более подробно архитектуру Android и то, как Google считает, что она должна использоваться.

0

Вы должны использовать класс обслуживания для него как -

public class Myservice extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } 

@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(Constants.TAG, "Service Started"); return START_NOT_STICKY; } 

@Override public void onDestroy() { super.onDestroy(); Log.d(Constants.TAG, "Service Destroyed"); } 

@Override public void onTaskRemoved(Intent rootIntent) { Log.e(Constants.TAG, "END"); //Perfome here want you want to do when app gets kill stopSelf(); } } 

манифеста -

<service android:name="Myservice" 
      android:stopWithTask="false" /> 

В Oncreate вашей пусковой деятельности или приложений класса для запуска службы -

startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); 
+0

добавить эту строку в манифест в теге приложения – sanil

Смежные вопросы