
给每个Activity都添加对应的代码:
@Override
protected void onResume() {
superonResume();
AppContextgetInstance()setCurrentActivity(this);
}
@Override
protected void onPause() {
AppContextgetInstance()setCurrentActivity(null);
superonPause();
}
@Override
public void onDestroy() {
AppContextgetInstance()setCurrentActivity(null);
superonDestroy();
}
然后在自己的app中:
import androidappActivity;
import androidappApplication;
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 LazyHolderinstance;
}
@Override
public boolean Start(Map<String, Object> args) {
Object param = argsget(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){
thiscurActivity = curActivity;
}
public Activity getCurrentActivity(){
return thiscurActivity;
}
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:
if(AppContextgetInstance()isInMainActivity()){
//do sth
}
开发项目中经常会遇到很多手机厂商制造的麻烦如涉及权限,程序授权(受信任应用),或service自启动管理等由于android手机种类繁多,厂商自制系统各自为王弄得我们有时不得不针对固定的厂商或机型做定制开发
本文就提供一种靠adb命令获取手机当前activity的方法!
1首先 要配置adb环境变量 这里就不多说了,自己百度就好了,非常简单!
2配置好环境变量后,就可以运用adb 命令了
以OPPO r9S获取自启动管理界面为例:
将手机调好到指定界面后:打开cmd 输入
1) adb devices //查看链接设备
adb shell dumpsys activity top //获取栈顶activity
![Q%T]T N0RQ0X{@ GP~TVZFGpng]( >
打开apk,进入你需要抓取的activity,执行:
adb shell dumpsys window | grep mCurrentFocus
返回结果:(例如打开了Google的Chrome)
mCurrentFocus=Window{15145d93 u0 comandroidchrome/comgoogleandroidappschromeChromeTabbedActivity}
这里面的comandroidchrome就是需要的包名,comgoogleandroidappschromeChromeTabbedActivity就是需要的activity;
最近学习安卓开发activity的生命周期,对单个活动的生命周期较为熟悉。此时师兄抛出问题,当一个activity进入 onStop() 时,如何得知时由于用户点击了主页键,还是由于进入了另一个本程序的activity?
查阅网络资源后,得知可以通过安卓本身的多种方法来判断。不过某些方法的使用需要获取用户授权,或者需要较高版本的安卓系统。不过本文主要介绍通过activity本身的生命周期回调函数来判断。
由于设计两个activity的跳转,所以我们应该去考虑多个activity的生命周期回调函数顺序。查阅并测试可知,当进行activity跳转时,先执行原来activity的 onPause() 和,然后执行第二个activity的 onCreate() 、 onStart() 、 onResume() ,再执行第一个activity的 onStop 。如图所示,红色是第一个activity的回调函数执行,蓝色是第二个。
我们可以利用这个特点,通过一个static变量来记录当前run的activity数量,当这个数量为0的时候,即程序被压入后台,当这个数量不为0,则表明当前执行了一个跳转 *** 作。
首先新建一个 BaseActivity 类,声明一个static变量,让别的activity全部继承。并在 onStart() 和 onStop() 中修改 count 。
创建 MainActivity 类,继承自 BaseActivity 类,同时修改 onStop() ,检查 count 的值,判断此次导致 onStop() 的原因。我在这个activity中添加了一个button用于跳转到第二个activity。
这个类很简单,没有什么功能,只是跳转过来后,执行基类的 onCreate() 方法。
至此,我们便实现了通过activity生命周期回调函数判断是否被压入后台。不过,后来学长针对我的这种方式提出了漏洞——当引用外部SDK,且外部SDK中可以d出未继承我们自定义的base基类的activity,那么怎么处理这种情况呢?这里就要用到安卓SDK提供的全局生命周期类了——ApplicationregisterActivityLifecycleCallbaks,这里我们之后再谈。
(1)用“adb
shell
dumpsys
activity”命令可以查看
(2)另外,用"adb
logcat
|
grep
ActivityManager",也可以查看当前正在运行的Activity
以上就是关于Android中判断当前处于哪个Activity全部的内容,包括:Android中判断当前处于哪个Activity、android利用adb命令,获取当前界面(当前Task的栈顶).、安卓自动化测试怎么获取当前正在运行activity等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)