-
2022-06-17 15:35:54
protected String TAG = getClass().getSimpleName();
我们可以写在BaseActivity里面中,来监听当前是哪个界面
更多相关内容 -
android获取当前界面activity对象
2021-04-11 11:37:59现在我们可以使用纯java代码来获取当前系统中的activity对象,有了activity对象我们就可以做很多想做的事情,比如监听改activity的生命周期,给改activity界面添加浮动view等等。废话少说看下面方法:...标签:
在编写android应用的时候一般跟界面相关的都离不开activity,很多时候我们需要在纯java环境中使用activity对象,一般情况下我们都是靠参数传递去使用。现在我们可以使用纯java代码来获取当前系统中的activity对象,有了activity对象我们就可以做很多想做的事情,比如监听改activity的生命周期,给改activity界面添加浮动view等等。废话少说看下面方法:
public static Activity getGlobleActivity() throws ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, NoSuchFieldException{
Class activityThreadClass = Class.forName("android.app.ActivityThread");
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activitiesField.setAccessible(true);
Map activities = (Map) activitiesField.get(activityThread);
for(Object activityRecord:activities.values()){
Class activityRecordClass = activityRecord.getClass();
Field pausedField = activityRecordClass.getDeclaredField("paused");
pausedField.setAccessible(true);
if(!pausedField.getBoolean(activityRecord)) {
Field activityField = activityRecordClass.getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(activityRecord);
return activity;
}
}
return null;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
-
Android获得当前正在显示的activity类名的方法
2021-01-05 19:12:55本文实例讲述了Android获得当前正在显示的activity类名的方法。分享给大家供大家参考。具体实现方法如下: 首先需要加一个权限: 代码如下:”android.permission.GET_TASKS”/> Java代码如下: 代码如下:... -
Android 如何获取当前的Activity对象
2022-05-09 13:46:57在一个Activity中,通过startActivityForResult()方法打开了另一个Activity,那么如何获取到新打开的Activity对象,我需要用这个对象去实现findViewById方法,现在的话是在报错,空指针异常,有知道怎么实现的么,... -
Android 获取当前Activity的方式
2021-08-23 10:12:51通过RunningTaskInfo的topActivity获取当前Activity实例。通过该种方式获取的Activity,只能保证其已经执行了Activity.onCreate方法,不能保证是否执行了Activity.onResume方法。该方法在api 21以后已经被禁,使用需...一、背景
在开发的过程中有时候需要获取最上层的activity。
二、获取方式
- 通过RunningTaskInfo的topActivity获取当前Activity实例。通过该种方式获取的Activity,只能保证其已经执行了Activity.onCreate方法,不能保证是否执行了Activity.onResume方法。该方法在api 21以后已经被禁,使用需谨慎。
public static String getCurrentActivityName(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); ComponentName componentInfo = taskInfo.get(0).topActivity; return componentInfo.getClassName(); }
- 通过Android 4.0之后提供的ActivityLifecycleCallbacks接口监听当前的Activity实例,可以在onActivityCreated或者onActivityResumed当中获取到。建议在onActivityResumed当中去获取,同时最好以软引用或者弱引用的方式持有,防止OOM。(其中XxxApplication是你的工程Application)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { registerActivityLifecycleCallbacks(new ActivityLifeCycleCallbackAdapter() { @Override public void onActivityResumed(Activity activity) { super.onActivityResumed(activity); activityRef = new SoftReference<Activity>(activity); } }); }
public static boolean isActivityResumed(Class<?> clazz) { if (clazz == null) { throw new NullPointerException("activity class can not be null"); } SoftReference<Activity> currentActivityRef = XxxApplication .getCurrentActivityRef(); if (currentActivityRef == null) { return false; } Activity currentActivity = currentActivityRef.get(); if (currentActivity == null || !clazz.isInstance(currentActivity)) { return false; } return true; }
-
手写Activity管理栈,可以使用Stack或者List等存储已经执行了Activity.onCreate或者Activity.onResume方法的Activity,并相应在Activity.onPause或者Activity.onDestroy中移除。
-
反射方式
public static Activity getCurrentActivity () { try { Class activityThreadClass = Class.forName("android.app.ActivityThread"); Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke( null); Field activitiesField = activityThreadClass.getDeclaredField("mActivities"); activitiesField.setAccessible(true); Map activities = (Map) activitiesField.get(activityThread); for (Object activityRecord : activities.values()) { Class activityRecordClass = activityRecord.getClass(); Field pausedField = activityRecordClass.getDeclaredField("paused"); pausedField.setAccessible(true); if (!pausedField.getBoolean(activityRecord)) { Field activityField = activityRecordClass.getDeclaredField("activity"); activityField.setAccessible(true); Activity activity = (Activity) activityField.get(activityRecord); return activity; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null; }
-
Android判断栈顶activity;打印当前最顶层的activity类名;采用服务后台运行获取当前activity类名;
2017-07-28 10:53:15Android判断栈顶activity;打印当前最顶层的activity类名;采用服务后台运行获取当前activity类名;是一个demo App,使用Android studio工具打开,有需要的可以自行下载; -
java中的Activity
2021-02-27 17:18:03Activity首先,Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太...Activity
首先,Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了。
在深入了解Activity之前,我们先要知道一下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我就先来介绍一下MVC在Android开发中的应用:
M(Model 模型):Model是应用程序的主体部分,所有的业务逻辑都应该写在这里,在Android中Model层与JavaEE中的变化不大,如:对数据库的操作,对网络等的操作都放在该层(但不是说它们都放在同一个包中,可以分开放,但它们统称为Model层)。
V(View 视图):是应用程序中负责生成用户界面的部分,也是在整个MVC架构中用户唯一可以看到的一层,接收用户输入,显示处理结果;在Android应用中一般采用XML文件里德界面的描述,使用的时候可以非常方便的引入,当然也可以使用JavaScript+Html等方式作为View。
C(Controller控制层)android的控制层的重任就要落在众多的activity的肩上了,所以在这里就要建议大家不要在activity中写太多的代码,尽量能过activity交割Model业务逻辑层处理。
好了,在介绍过Android应用开发中的MVC架构后,我们就可以很明确的知道,在Android中Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。
介绍过Activity的主要作用后,那么我们就要详细说一下Activity了。
Activity生命周期图
Activity 的生命周期是被以下的函数控制的。
public class Activity extends ApplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onFreeze(Bundle outIcicle);
protected void onPause();
protected void onStop();
protected void onDestroy();
}
onCreate(Bundle) 函数是你进行初始化的地方,这个也是执行
setContentView(View)函数的地方,setContentView(View)函数可以传入一个由XML
编制的UI界面,可以使UI和具体实现完全分离。
onPause()函数是处理用户离开当前 Activity 的地方。更重要的是,任何在当前
Activity中的任何改变都要在这个函数中提交。
Activity有四种状态:
活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就
处于activity或者运行状态。
运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外一个Activity
处于文档处于焦点状态,当前的Activity就处于pause。
停止,当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在
运行,但是用户却看不见。
结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这
是Activity就是处于结束状态了。
处于结束状态的是Activity,如果要使用户可见,只要重启才可以。
Activity的响应时间
当前Activity所在的线程为主线程,它的响应时间为5秒,如果在当前运行的Activity中进行耗时的操作且响应时间起过5秒,那么程序就会报ANR错误。所以,这也是不建议在Activity中写太多复杂代码的原因之一。
当然,有些代码只能写在Activity中,不然就运行不了(它们不是生命周期方法),比如你想要获得android系统或者硬件一的些信息,就必须在Activity中写出来,如果单独写一个工具类获得不了。
1.Activity的主要作用
Activity是Android一个非常重要的用户接口,是可见的,用户和应用程序之间进行交互的接口。在每个Activity中都可以放很多控件,所以也可以把Activity看作控件的容器。
2.创建Activity的要点
1)一个Activity就是一个类,并且这个类要继承Activity,而这个被继承的Activity来源于android.jar包
2)需要复写onCreate方法,当一个Activity第一次运行时Android操作系统就会调用onCreate方法
3)因为Activity是应用程序的组件,所以每一个Activity都必须在AndroidManifest.xml里面注册,manifest相当于应用程序清单。
4) 为Activity添加必要的控件
3.在AndroidManifest.xml文件中注册应用Activity的方法
1) 注册Activity的时候name的时候前面加点,因为和包名合起来就刚好是这个类(或者说Activity)的路径。
2) label,就是在页面上方白色的部分显示的文字
3)intent-filter,暂时不用管,意思就是你在哪个activity配置这个东西,哪个activity就在应用打开的时候第一个运行
4.在Activity中添加控件,就是在layout文件夹中创建布局文件(严格意义上来说并不是每一个Activity都要创建一个相应的xml布局文件,比如:TextView textview = new TextView(this);
//以前我一直以为每创建一个Activity必须相应地也要创建一个layout文件,现在发现不是这样,也可以按照这个方法,创建一个简单的TextView,把Context设置为this,设置一个文本值,然后再将这个TextView设置为ContentView.这种个人觉得更加方便测试吧。
textview.setText("This is the Artists tab");
setContentView(textview);
}
}
这样的方法同样工作,但是总的来说还是建议为每一个Activity定义一个布局文件。
1) 程序中的setContentView就是设置这个Activity所使用的布局文件。
比如:setContentView(R.layout.my_text); //说到这里,注意一个问题,布局文件的名称不允许有大写
2) 在xml文件中设置的控件id会在R.java中生成id
3)在应用程序中使用findViewById来取得布局文件中的控件(前提是布局文件中的控件必须设置相应的id),因为它的返回类型为View,所以要强制类型转换为控件类型
举个例子就是 Button button =(Button)findViewById(R.id.button);
————————————————
版权声明:本文为CSDN博主「lidandan2016」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lidandan2016/article/details/78030688
-
获取Android activity上所有的控件
2021-05-26 07:15:35下面是编程之家 jb51.cc 通过网络收集整理的代码.../*** @note 获取该activity所有view* @author liuh* */public List getAllChildViews() {View view = this.getWindow().getDecorView();return getAllChildViews(v... -
Android获取当前的Activity类名
2017-06-17 20:13:21Android获取当前的Activity类名,详细可参考博客:http://blog.csdn.net/android_cmos/article/details/73382573 -
java – 如何获取当前的GPS位置?
2021-02-27 11:01:54经过一番研究后,我想出了这个:public class UseGps extends Activity{Button gps_button;TextView gps_text;LocationManager mlocManager;/** Called when the activity is first created. */@Overridepublic void ... -
安卓通过Application获取当前Activity的实例(程序中不推荐保存Activity的实例)
2018-01-09 09:03:56在应用开发过程中,我们经常遇到在Module与App的交互,如果在Module里...人员混杂的项目,没有一个BaseActivity,无法获取到当前的Activity,实现就比较困难,通过网上学习,找到了一种获取Activity对象的实例的方法 -
java代码实现如何获取当前经纬度?(安卓的话可以用GPS取)
2021-03-04 06:08:38import android.app.Activity;import android.os.Bundle;import android.location.*;import android.content.*;import android.util.Log;import android.widget.TextView;public class GPSLocationListenActivity ex... -
Activity详解
2021-02-12 14:37:221、IntentIntent是各个组件之间交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,而且还能在各组件之间传递数据。Intent一般可用于启动Activity、启动Service、发送广播等场景。Intent大致可分为2中:1、... -
通过ADB命令获取当前activity
2017-07-12 14:37:32自动化测试需要获得当前的activity,来判断处于的页面是否正确; hierarchy view经常连不上真机,无法获得activity,所以直接用 adb命令来查看当前运行的 activity就可以; 方法一: 1、cmd命令中输入:adb ... -
Android获取所有Activity
2022-02-24 15:37:54} 3 获取栈顶 Activity //获取栈顶Activity及其所属进程 public static String getTopActivityNameAndProcessName(Context context) { String processName = null; String topActivityName = null; ActivityManager... -
Android-TopActivity展示当前app所处的最顶activity
2019-08-13 04:19:07TopActivity 展示当前app所处的最顶activity -
获取当前Activity及Fragment名字
2016-05-09 20:49:52在我们接手一个新项目,或者是拿到一份android程序源码的时候,要快速找到需要的代码,该从何下手呢?...这就是今天要介绍的获取当前Activity及Fragment名字的技巧。由于Activity和Fragment的情况十分 -
Android快速获取当前Activity类名的三种方法
2017-06-17 20:00:22在程序猿的世界里,大部分都是接手的别人的项目,而对于一些项目文档全面,项目代码规范,在阅读代码的时候相对轻松些,不至于当前是哪个Activity都不知道。But,理想是丰满的,现实是骨感的。规范的一点的,会写个... -
adb获取当前顶层activity
2019-09-10 14:46:23操作命令 adb shell dumpsys window | grep mCurrentFocus 样例结果 mCurrentFocus=Window{b861d68 u0 ... Java | 安卓 | 前端 | 小程序 | 鸿蒙 公众号:花生皮编程 -
查看当前手机页面对应的 Activity
2022-02-23 11:34:23手机开发中,想要获取当前页面对应的 Activity,使用以下命令行即可: adb shell dumpsys window windows | findstr "Current" 查看手机中对应的 Activity: PS E:\Mobile\databases> adb shell dumpsys ... -
完美实现将activity作为dialog弹窗进行弹出
2020-11-11 22:30:41完美事件将activity作为dialog弹窗进行弹出 里面包含比较详细的注释,以及如何实现 既可以作为弹窗,有可以作为普通的activity来使用 -
玩转Android10源码开发定制(十)增加获取当前运行最顶层的Activity命令
2021-01-05 10:28:15一、获取当前运行的顶层 Activity 的几种方式 在 Android 开发中,由于某些需求常常需要获取当前顶层的 Activity 信息。比如 App 中获取顶层 Activity 界面信息来判断某一个 app 是否在前台运行、统计某一个 app 的... -
Activiti获取所有Activity以及如何获取上一步任务
2021-02-27 08:35:551.获取流程定义的所有Acitivity/*** @author: kaka* @date:2017/4/26 17:24* @params: [dkey 流程定义的key]* @return:java.util.List* @描述: 根据流程定义的key获取流程定义所有的activity** 释义:在设计流程时每... -
Android中获取当前正在显示的Activity实例
2019-09-15 10:29:15Android开发中需要用到当前 activity实例,如何...1.保存当前Activity实例 import android.app.Activity; import java.lang.ref.WeakReference; public class MyActivityManager { private static MyActivityManag... -
android获取栈顶activity的方法
2021-12-17 17:54:091.重写Application,并使用registerActivityLifecycleCallbacks方法接收activity的回调。 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ... -
判断当前Activity上显示的是哪个Fragment
2021-09-27 19:17:55Kotlin val fragmentManager: Fragment?...//R.id.flSetContent就是我们Activity里面用于添加Fragment的底层布局ID if (fragmentManager != null && fragmentManager is CommonFragment) { Log.e(