выполнить действие по очистке приложения с панели задач Android программно

#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