Check whether activity is active

前端 未结 8 2282
眼角桃花
眼角桃花 2020-11-27 04:47

I\'m having a problem with a listener in a certain activity.

The problem is that this listener contains an alert.show(); which can be called after we try to push a

8条回答
  •  醉酒成梦
    2020-11-27 05:16

    I was having 2 activities A & B, I just wanted to know Activity B is running or not from A.

    Initially i followed "RunningTaskInfo" for resolving the problem, It was not working 100%.

    So i created own solution, I will post my solution. Using HashMap and AtomicBoolean class.

    public class ActivityStateTracker {
    final private Map mMap = new HashMap();
    
    private static ActivityStateTracker instance = null;
    /**
     * SingletonClass
     * */
    private ActivityStateTracker() {
    
    }
    
    public static ActivityStateTracker getInstance(String activityName, boolean defaultVal) {
    
        if(instance == null) {
            instance = new ActivityStateTracker();
        }
        instance.setDefaultValue(activityName, defaultVal);
        return instance;
    }
    
    private void setDefaultValue(String activityName, boolean defaultVal) {
        mMap.put(activityName, new AtomicBoolean(defaultVal));
    }
    
    public boolean isRunning(String activityName) {
        final AtomicBoolean atomicBool = mMap.get(activityName);
        return (mMap.get(activityName) == null) ? false : atomicBool.get();
    }
    
    public void setChangeState(String activityName, boolean value) {
        final AtomicBoolean atomicBool = mMap.get(activityName);
    
        if(atomicBool == null) {
            setDefaultValue(activityName, value);
        } else {
            atomicBool.set(value);
            mMap.put(activityName, atomicBool);
        }
    }
    

    }

    Now in Activity B.

     public static final String TAG = "EditScreenPopupActivity";
    
    static ActivityStateTracker mActivityState = ActivityStateTracker.getInstance(TAG, false);
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivityState.setChangeState(TAG, true);
    
        requestWindowFeature(Window.FEATURE_NO_TITLE);
    
        setContentView(R.layout.activity_traslucent);
    
    }
    
    @Override
    protected void onDestroy() {
        mActivityState.setChangeState(TAG, false);
        super.onDestroy();
    }
    

    Now in Activity A.

    public static final String TAG = "ToolTipPopupActivity";
    
    static ActivityStateTracker mActivityState = ActivityStateTracker.getInstance(TAG, false);
    
       /** Check Edit screen activity is running or not? */
       if(mActivityState.isRunning("EditScreenPopupActivity")) {
            finish();
        }
    

    ......................................

    This solution is working properly in my case.. I hope it will help you as well..

提交回复
热议问题