android 获取当前运行的activity(待整理测试····)

目前做im即时通信聊天,获取到消息需要判定是否是属于当前聊天窗口,以便分别处理,所以查阅了几种方法,几个解决方法:

1-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都添加对应的代码:

 @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.
    }

了。


对应任何的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。

---------------------------分 割 线----------------------------------

另外找到的两种方法:

第一种:要方便一点(Service中无法使用)

代码如下:

private String getRunningActivityName() {          String contextString = context.toString();          return contextString.substring(contextString.lastIndexOf(".") + 1, contextString.indexOf("@"));  }
第二种:要稍微麻烦一点,需要一个权限(推荐)
代码如下:
<uses-permission android:name="android.permission.GET_TASKS" /> 

private String getRunningActivityName(){                  ActivityManager activityManager=(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);          String runningActivity=activityManager.getRunningTasks(1).get(0).topActivity.getClassName();          return runningActivity;                 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随与博主沟通,第一间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值