精华内容
下载资源
问答
  • java获取当前activity
    2022-06-17 15:35:54
    protected String TAG = getClass().getSimpleName();

    我们可以写在BaseActivity里面中,来监听当前是哪个界面

    更多相关内容
  • 现在我们可以使用纯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类名的方法。分享给大家供大家参考。具体实现方法如下: 首先需要加一个权限: 代码如下:”android.permission.GET_TASKS”/> Java代码如下: 代码如下:...
  • 在一个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类名;是一个demo App,使用Android studio工具打开,有需要的可以自行下载;
  • java中的Activity

    2021-02-27 17:18:03
    Activity首先,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

    展开全文
  • 下面是编程之家 jb51.cc 通过网络收集整理的代码.../*** @note 获取activity所有view* @author liuh* */public List getAllChildViews() {View view = this.getWindow().getDecorView();return getAllChildViews(v...
  • Android获取当前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 ...
  • 在应用开发过程中,我们经常遇到在Module与App的交互,如果在Module里...人员混杂的项目,没有一个BaseActivity,无法获取当前Activity,实现就比较困难,通过网上学习,找到了一种获取Activity对象的实例的方法
  • import 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:22
    1、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...
  • TopActivity 展示当前app所处的最顶activity
  • 获取当前Activity及Fragment名字

    万次阅读 2016-05-09 20:49:52
    在我们接手一个新项目,或者是拿到一份android程序源码的时候,要快速找到需要的代码,该从何下手呢?...这就是今天要介绍的获取当前Activity及Fragment名字的技巧。由于Activity和Fragment的情况十分
  • 在程序猿的世界里,大部分都是接手的别人的项目,而对于一些项目文档全面,项目代码规范,在阅读代码的时候相对轻松些,不至于当前是哪个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弹窗进行弹出 里面包含比较详细的注释,以及如何实现 既可以作为弹窗,有可以作为普通的activity来使用
  • 一、获取当前运行的顶层 Activity 的几种方式 在 Android 开发中,由于某些需求常常需要获取当前顶层的 Activity 信息。比如 App 中获取顶层 Activity 界面信息来判断某一个 app 是否在前台运行、统计某一个 app 的...
  • 1.获取流程定义的所有Acitivity/*** @author: kaka* @date:2017/4/26 17:24* @params: [dkey 流程定义的key]* @return:java.util.List* @描述: 根据流程定义的key获取流程定义所有的activity** 释义:在设计流程时每...
  • Android开发中需要用到当前 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:09
    1.重写Application,并使用registerActivityLifecycleCallbacks方法接收activity的回调。 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ...
  • Kotlin val fragmentManager: Fragment?...//R.id.flSetContent就是我们Activity里面用于添加Fragment的底层布局ID if (fragmentManager != null && fragmentManager is CommonFragment) { Log.e(

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,048
精华内容 48,419
关键字:

java获取当前activity