Android 判断某一个类是否存在任务栈里面

在开发项目的时候,我们经常会遇到一些问题,除了设置一些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<RunningTaskInfo> 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<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);
  if (list.size() == 0) {
       // 说明系统中不存在这个activity
  }

是不是很简单,么么哒。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 19:27:11

Android 判断某一个类是否存在任务栈里面的相关文章

如何限制一个类对象只在栈(堆)上分配空间?

最近做了一道题:在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错) 其实该问题等同于如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间.但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类.这能不能实现呢?仔细想想,其实也是可以滴. 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 1.静态建立类对象:是由编译器为对象在栈空间中分配内存,

Android Toast:是一个类,主要管理消息的提示

Toast:是一个类,主要管理消息的提示.makeText(),是Toast的一个方法,用来显示信息,分别有三个参数.第一个参数:this,是上下文参数,指当前页面显示第二个参数:“string string string ”是你想要显示的内容,也可以是“你好!”.这个是随便定义的,显示你想要显示的内容.第三个参数:Toast.LENGTH_LONG,是你指你提示消息,显示的时间,这个是稍微长点儿,对应的另一个是ToastLENGTH_SHORT,这个时间短点儿,大概2秒钟.show(),表示显

Android Studio implements 一个类后如何实现这个类的方法

public class BDLocationListenerImpl implements BDLocationListener 1.首先选中BDLocationListener,然后右键 2. 选择Generate,出现下图: 3.选择 Implement Methods,出现下图 4.选择要实现的方法,完毕. 另外,可以用快捷键CTRL+n 会弹出第一张图界面.

一个使用命令行编译Android项目的工具类

一个使用命令行编译Android项目的工具类 简介 编译apk项目需要使用的几个工具,基本都在sdk中,它们分别是(Windows系统): 1.aapt.exe 资源打包工具 2.android.jar Android编译工具 3.dx.bat dex文件生成工具 4.sdklib.jar 生成apk 5.jarsigner 签名工具 准备 在打包前,需要的环境如下: 1.JDK1.6+ 2.Android SDK 3.上述5个工具的路径 打包过程 1.生成R.java文件 比如: aapt p

java判断一个类是否公共类

Modifier.isPublic([类].getModifiers()) Modifier.isAbstract([类].getModifiers()) java判断一个类是否公共类,布布扣,bubuko.com

【OC学习-15】如何判断两个对象是否属于同一个类?如何判断一个对象是否属于某一个类?

每个对象都有一个isa,这个isa里面储存了很多关于类对象的一些信息,所以当这个对象编译的时候,程序会通过isa来查看这个对象的类型,即执行的时候再识别叫动态类型识别.而且这个对象里面的方法其实是被封装在SEL里面(有方法ID和内容),当外面利用方法传递消息的时候,先把这个方法ID化,然后找相同ID的方法,找到了就调用,找不到就通过isa里存储的信息往父类找,最终找不到,就报错.(相同的方法签名=相同的ID) (1)每个对象都可以调用类对象,如果它们是一个类出来的,它们的类对象也是一样的,所以判

C#判断一个类中有无&quot;指定名称&quot;的方法

C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 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 using System; using System.Reflection; namespace Hello {     class Program     {  

常见iOS面试题 之 怎么判断一个类是否遵循某个协议

答案: 使用方法conformsToProtocol. 调用例子: BOOL isConform = [Student conformsToProtocol:@protocol(UIScrollViewDelegate)]; 或者: Student* student =[[Student alloc] init]; BOOL isConform = [student conformsToProtocol:@protocol(UIScrollViewDelegate)]; 都可以. 这个方法既是N

在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)

同步代码块和同步方法的区别:同步代码块可以传入任意对象,同步方法中 如果多个线程检查的都是一个新的对象,不同的同步锁对不同的线程不具有排他性,不能实现线程同步的效果,这时候线程同步就失效了. 两者的区别主要体现在同步锁上面.对于实例的同步方法,因为只能使用this来作为同步锁,如果一个类中需要使用到多个锁,为了避免锁的冲突,必然需要使用不同的对象,这时候同步方法不能满足需求,只能使用同步代码块(同步代码块可以传入任意对象): 有几个原则的:程序次序规则:一个线程内,代码的执行会按照程序书写的顺序