Android: Detect when an application as a whole (not individual Activities) is paused/exited?

ⅰ亾dé卋堺 提交于 2019-12-11 05:37:17

问题


One of the Activities in my app starts/binds to a service (also part of my app). I would like that service to continue running as long as the app as a whole is still in the foreground, regardless of which Activity is active. But I need to make sure that the service is stopped when the app as a whole is paused (home button/back button).

How can I do that on an application level rather than an Activity level?


回答1:


The easiest way is to have a singleton which keeps a track of the state of each activity, e.g showing just one activity as an example:

public class ActivityStates {

    private static  ActivityStates  ref = null;
    private static int firstAct     = ACTIVITY_GONE;

    public static synchronized  ActivityStates getInstance() {
        if (ref == null) {
            ref = new ActivityStates();
        }
        return ref;
    }

    public int getFirstAct() {
        return firstAct;
    }

    public void setFirstAct(int arg) {
        this.firstAct = arg;
    }
}

.. and define some static constants that you can import

public static final int ACTIVITY_GONE       = 0;
public static final int ACTIVITY_BACKGROUND = 1;
public static final int ACTIVITY_FOREGROUND = 2;

then in each activity have a method

private void setActivityState(int state){
        ActivityStates as = ActivityStates.getInstance();
        as.setFirstAct(state);
}

Then in your onResume(), onPause, onDestroy() you can set the activitiy's state when you enter these methods, e.g in onResume have

setActivityState(ACTIVITY_FOREGROUND)

in onDestroy() have

setActivityState(ACTIVITY_GONE)

Then in you service, or wherever you want , you can use the get methods to find out the state of each activity and decide what to do.



来源:https://stackoverflow.com/questions/9099598/android-detect-when-an-application-as-a-whole-not-individual-activities-is-pa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!