(4.2.16.3)判断某Activity是否在系统中存在?是否启动过?以及让它自行关闭
2015-08-31 19:01
756 查看
(1)acitvitymanager
有些时候,可能需要判断系统中是否存在某个Activity?它是否已经启动?比如,如果我在某处判断ActivityMain要是存在并且已经启动过,我就启动它,以便它自行关闭!
[java] view
plaincopy
protected void startAndExit() {
logi(TAG, "---startAndExit---");
Intent intent = new Intent(this, ActivityMain.class);
ComponentName cmpName = intent.resolveActivity(getPackageManager());
boolean bIsExist = false;
if (cmpName != null) { // 说明系统中存在这个activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> taskInfoList = am.getRunningTasks(10);
logi(TAG, "---startAndExit---taskInfoList.size:" + taskInfoList.size());
for (RunningTaskInfo taskInfo : taskInfoList) {
LogUtils.logi(TAG, "---startAndExit---taskInfo:"
+ taskInfo.baseActivity);
if (taskInfo.baseActivity.equals(cmpName)) { // 说明它已经启动了
bIsExist = true;
break;
}
}
}
logi(TAG, "---onStartAndExit---bIsExist:" + bIsExist);
if (bIsExist) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("isExit", (Boolean) true); //让它自行关闭
this.startActivity(intent);
}
}
如果某个Activity的运行模式被设置为singleTask或singleInstance,再次启动它,会触发它的onNewIntent方法。
[java] view
plaincopy
@Override
protected void onNewIntent(Intent intent) {
logi(TAG, "---onNewIntent---");
super.onNewIntent(intent);
if (intent.getBooleanExtra("isExit", false)) {
finish(); // 自行关闭
}
}
(二) isfinish()
由于多线程下载,在下载完成时,要回调Activity中的方法,但是,有可能用户在此期间已经点击了Back,Activity的onDestroy方法已经被调用,Activity已经被销毁,所以,下载线程在完成下载,回调时,要先判断Activity的状态,是否已经销毁掉,在网上查找答案,结果遇到一个说:((Activity) mContext).isDestroyed();
可是到MyEclipse中,写了一下,代码提示,根本没有这个方法,真心坑爹啊,不过,有一个activity#isFinishing,写了个测试代码,发现可用,Activityon在Destroy之前,activity#isFinishing返回false,Activityon在Destroy之后,返回true。
测试线程代码如下:
import android.app.Activity;
public class MyThread extends Thread {
Activity activity;
public MyThread(Activity activity) {
super();
this.activity = activity;
}
@Override
public void run() {
super.run();
for (int i = 0; i < 3; i++) {
System.out.println(i + " activity:" + activity);
System.out.println(i + " isFinishing:" + activity.isFinishing());
try {
sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
(三) adb shell命令 打印
进入到Android-sdk中platform-tools目录在命令行中执行以下命令
adb shell dumpsys activity>activity.txt
可以将当前的四大组件(Activity,Service,BroadCase,ContentProvider)的存在情况打印到当前目录的activity.txt文件中
[java] view
plaincopy
@Override
protected void onNewIntent(Intent intent) {
logi(TAG, "---onNewIntent---");
super.onNewIntent(intent);
if (intent.getBooleanExtra("isExit", false)) {
finish(); // 自行关闭
}
}
相关文章推荐
- Android 初体验
- JS-基础
- oop第二章1知识点汇总
- Host 'localhost' is not allowed to connect to
- seajs 使用文档
- 表单重复提交
- 使用Intent和IntentFilter进行通信
- 求两个年份之间闰年的数目
- EF
- 初来乍到
- 好用的在线工具类网站
- 51nod 1243 排船的问题(锻炼思维的好题)
- RaspiCam: C++ API for using Raspberry camera with/without OpenCv
- 单例集合知识点总结
- Win10开发:文件操作之FileOpenPicker、FileSavePicker和FolderPicker
- 智能聊天机器人小黄鸡及其制作方法
- HDU3488Tour(KM最小费用圈覆盖)
- Xcode中自定义代码块,只要在Xcode中操作即可
- 数据流重定向
- 内存映射操作