【背景】
android项目中,需要根据当前处于哪个activity去决定后续动作。
所以需要去获得当前处于哪个activity。
【解决过程】
1.搜:
android check current activity
参考:
How to get current foreground activity context in android? – Stack Overflow
感觉很麻烦啊。
2.参考:
android – How to check if my activity is the current activity running in the screen – Stack Overflow
需要每个activity都去给onResume添加代码,也很麻烦。
3.搜:
android current which activity
参考:
没找到合适的。
4.还是参考:
How to get current foreground activity context in android? – Stack Overflow
去给每个onResume,onDestroy,onPause,都加上对应的设置。
【总结】
最后是通过上述办法,给每个Activity都添加对应的代码:
@Override protected void onResume() { super.onResume(); AppContext.getInstance().setCurrentActivity(this); } @Override protected void onPause() { AppContext.getInstance().setCurrentActivity(null); super.onPause(); } @Override public void onDestroy() { AppContext.getInstance().setCurrentActivity(null); super.onDestroy(); }
然后在自己的app中:
此处我的是:
import android.app.Activity; import android.app.Application; public class AppContext extends Application{ private Application parentApp; private Activity curActivity; public Application getAppContext() { return parentApp; } private static class LazyHolder { static AppContext instance = new AppContext(); } public static AppContext getInstance() { return LazyHolder.instance; } @Override public boolean Start(Map<String, Object> args) { Object param = args.get(appContext); if (param instanceof Application) { parentApp = (Application)param; return true; } return false; } @Override public void Stop(Map<String, Object> args) { } public void setCurrentActivity(Activity curActivity){ this.curActivity = curActivity; } public Activity getCurrentActivity(){ return this.curActivity; } public boolean isInAdapterActivity(){ boolean isInAdapterActivity = false; if(null != curActivity){ if(curActivity instanceof AdapterActivity){ isInAdapterActivity = true; } } return isInAdapterActivity; } public boolean isInScanActivity(){ boolean isInScanActivity = false; if(null != curActivity){ if(curActivity instanceof ScanActivity){ isInScanActivity = true; } } return isInScanActivity; } public boolean isInMainActivity(){ boolean isInMainActivity = false; if(null != curActivity){ if(curActivity instanceof MainActivity){ isInMainActivity = true; } } return isInMainActivity; } }
然后在对应各个Activity:
- AdapterActivity
- ScanActivity
- MainActivity
中就可以去调用:
if(AppContext.getInstance().isInMainActivity()){ //do sth. }
了。
【后记】
1.后来是再次去看了:
的Activity的生命周期图:
更加明确了上面方案的含义:
对应任何的Activity来说,只要处于:
当前运行(Running)
的状态,则都必须经过
onResume
所以,在onResume中,设此时Activity为当前的Activity。
对应的:
当Activity从Running变成别的状态时,也会经过onPause,所以在onPause中去设置当前Activity为null
(切换到别的Activity时,就进入了别的Activity的onResume了,就把别的Activity设置为当前的Activity了)
以及:
当Activity处于onDestory后,也同样设置当前Activity为null)
此时继续之前的循环:
如果进入别的Activity的话,自然会进入onResume,自然会设置别的Activity为当前正在运行的Activity。
2.另外抽空也可以看看这个:
Pausing and Resuming an Activity | Android Developers
转载请注明:在路上 » 【已解决】Android中判断当前处于哪个Activity