#android #background #android-lifecycle
#Android #фон #android-жизненный цикл
Вопрос:
я хочу нажать на API, когда приложение закрыто. Я выполнил работу с api в методе onDestroy. это работает, когда я выхожу из приложения с помощью обратного нажатия. но в случае, когда я напрямую очищаю приложение с панели задач без обратного нажатия, тогда метод не запускается. Сейчас я ищу метод, который поможет мне выполнить действие при очистке приложения с панели задач. Я надеюсь, что вы, ребята, поможете. Спасибо за вашу поддержку
вот мой код
override fun onBackPressed() {
logout2()
super.onBackPressed()
}
override fun onDestroy() {
logout2()
super.onDestroy()
}
Ответ №1:
Внутри вашего файла манифеста установите флажок stopWithTask как false для Service. Нравится:
<service
android:name="com.myapp.MyService"
android:stopWithTask="false" />
MyService.java
public class MyService extends AbstractService {
@Override
public void onStartService() {
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new Notification(R.drawable.ic_launcher, "My network services", System.currentTimeMillis());
notification.setLatestEventInfo(this, "AppName", "Message", pendingIntent);
startForeground(MY_NOTIFICATION_ID, notification);
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Toast.makeText(getApplicationContext(), "onTaskRemoved called", Toast.LENGTH_LONG).show();
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
}
}
AbstractService.java это пользовательский класс, который расширяет Sevrice:
public abstract class AbstractService extends Service {
protected final String TAG = this.getClass().getName();
@Override
public void onCreate() {
super.onCreate();
onStartService();
Log.i(TAG, "onCreate(): Service Started.");
}
@Override
public final int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStarCommand(): Received id " startId ": " intent);
return START_STICKY; // run until explicitly stopped.
}
@Override
public final IBinder onBind(Intent intent) {
return m_messenger.getBinder();
}
@Override
public void onDestroy() {
super.onDestroy();
onStopService();
Log.i(TAG, "Service Stopped.");
}
public abstract void onStartService();
public abstract void onStopService();
public abstract void onReceiveMessage(Message msg);
@Override
public void onTaskRemoved(Intent rootIntent) {
Toast.makeText(getApplicationContext(), "AS onTaskRemoved called", Toast.LENGTH_LONG).show();
super.onTaskRemoved(rootIntent);
}
}
Комментарии:
1. что такое return m_messenger.getBinder() здесь, откуда оно отправляется. @Urvish Jani