(1)acitvitymanager
有些时候,可能需要判断系统中是否存在某个Activity?它是否已经启动?
比如,如果我在某处判断ActivityMain要是存在并且已经启动过,我就启动它,以便它自行关闭!
- protected void startAndExit() {
- logi(TAG, "---startAndExit---");
- Intent intent = new Intent(this, ActivityMain.class);
- ComponentName cmpName = intent.resolveActivity(getPackageManager());
- boolean bIsExist = false;
- if (cmpName != null) {
- 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方法。
- @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文件中
- @Override
- protected void onNewIntent(Intent intent) {
- logi(TAG, "---onNewIntent---");
- super.onNewIntent(intent);
- if (intent.getBooleanExtra("isExit", false)) {
- finish();
- }
- }