网易云音乐Android端是怎么做到从任务栈中删除依然运行
发布网友
发布时间:2022-06-27 22:20
我来回答
共1个回答
热心网友
时间:2023-10-05 07:33
在开发项目的时候,我们经常会遇到一些问题,除了设置一些Activity的启动模式之外,好需要得到这个类是否被启动过,判断某一个类是否存在任务栈里面这个时候,我们就可以用到下面的方法:/**
* 判断某一个类是否存在任务栈里面
* @return
*/
private boolean isExsitMianActivity(Class cls){
Intent intent = new Intent(this, cls);
ComponentName cmpName = intent.resolveActivity(getPackageManager());
boolean flag = false;
if (cmpName != null) { // 说明系统中存在这个activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List taskInfoList = am.getRunningTasks(10);
for (RunningTaskInfo taskInfo : taskInfoList) {
if (taskInfo.baseActivity.equals(cmpName)) { // 说明它已经启动了
flag = true;
break; //跳出循环,优化效率
}
}
}
return flag;
}
/**
* 进行逻辑处理
*/
public void dealWithIntent(){
if(isExsitMianActivity(MainActivity.class)){//存在这个类
//进行操作
}else{//不存在这个类
//进行操作
}
}
另外还有:
一、根据包名判断应用是否存在
public boolean checkApplication(String packageName) {
if (packageName == null || .equals(packageName)){
return false;
}
try {
ApplicationInfo info = getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
return true;
} catch (NameNotFoundException e) {
return false;
}
}
二、判断Activity是否存在
Intent intent = new Intent();
intent.setClassName(包名, 类名);
方法一:
if (getPackageManager().resolveActivity(intent, 0) == null) {
// 说明系统中不存在这个activity
}
方法二:
if(intent.resolveActivity(getPackageManager()) == null) {
// 说明系统中不存在这个activity
}
方法三:
List list = getPackageManager().queryIntentActivities(intent, 0);
if (list.size() == 0) {
// 说明系统中不存在这个activity
}