gddhy

_(:з」∠)_ 加载中...
  • 主页
  • 归档
  • 工具
  • 关于
所有文章 友链

gddhy

_(:з」∠)_ 加载中...

  • 主页
  • 归档
  • 工具
  • 关于

如何判断Activity是否在运行?

2022-11-10
字数统计:431字 阅读时长≈2分

定义ActivityCollector

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set;

/**
* Author: jack
* Description:管理所有的栈中的Activity
*/
public class ActivityCollector {

/**
* 存放activity的列表
*/
public static HashMap<Class<?>, Activity> activities = new LinkedHashMap<>();

/**
* 添加Activity
*
* @param activity
*/
public static void addActivity(Activity activity, Class<?> clz) {
activities.put(clz, activity);
}

/**
* 判断一个Activity 是否存在
*
* @param clz
* @return
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static <T extends Activity> boolean isActivityExist(Class<T> clz) {
boolean res;
Activity activity = getActivity(clz);
if (activity == null) {
res = false;
} else {
if (activity.isFinishing() || activity.isDestroyed()) {
res = false;
} else {
res = true;
}
}

return res;
}

/**
* 获得指定activity实例
*
* @param clazz Activity 的类对象
* @return
*/
public static <T extends Activity> T getActivity(Class<T> clazz) {
return (T) activities.get(clazz);
}

/**
* 移除activity,代替finish
*
* @param activity
*/
public static void removeActivity(Activity activity) {
if (activities.containsValue(activity)) {
activities.remove(activity.getClass());
}
}

/**
* 移除所有的Activity
*/
public static void removeAllActivity() {
if (activities != null && activities.size() > 0) {
Set<Entry<Class<?>, Activity>> sets = activities.entrySet();
for (Entry<Class<?>, Activity> s : sets) {
if (!s.getValue().isFinishing()) {
s.getValue().finish();
}
}
}
activities.clear();
}
}

在 App中的BaseActivity中

1
2
3
4
5
6
7
8
9
10
11
12
13
public  class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this, getClass());
}

@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}

然后所有的Activity都去继承 BaseActvity 就可以使 ActivityCollector起作用了。

好处

在应用的任何地方都可以去获取到 Activity实例,从而操作指定的 View对象

1
2
MainActivity mainActivity = ActivityCollector.getActivity(MainActivity.class);
if (mainActivity!=null) mainActivity.main_radio.check(R.id.radio_button1);

判断一个 Activity是否存在

1
ActivityCollector.isActivityExist(MainActivity.class);

转载自 https://www.jianshu.com/p/e46b843b95f4

适合每个Activity只有一个实例的,方便管理

可以在AndroidManifest中指定Activity的启动方式

1
android:launchMode="singleTop"
赏

谢谢你请我吃糖果

微信

扫一扫,分享到微信

微信分享二维码
安卓监听home键点击
ImageView高度自适应
目录,不存在的…
留言已关闭
:gddhy
© gddhy
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链

tag:

  • Android
  • 软件分享
  • game
  • Hexo
  • JavaScript
  • 旧机博物馆
  • MIUI
  • Java
  • git
  • Termux
  • mtk
  • 原神
  • Win
  • Html
  • 安卓学习笔记

    缺失模块

  • Luminous' Home
  • 影子博客
  • 四次元领域
  • 初之音
  • Mr.Pumpkin
  • ZhaoQuinn 's Blog