Android之lrucache原理以及获取系统应用和启动系统应用

Lru的全称是Least Recently Used ,近期最少使用的!LruCache 的实现原理:把近期最少使用的数据从缓存中移除,保留使用最频繁的数据

  private ArrayList<AppInfo> getAppInfo() {
        ArrayList<AppInfo> appList = new ArrayList<>();//存储应用信息
        List<PackageInfo> packageInfos = getPackageManager().getInstalledPackages(0);
        for (int i = 0; i < packageInfos.size(); i++) {
            PackageInfo packageInfo = packageInfos.get(i);
            AppInfo appInfo = new AppInfo();
            appInfo.appName = packageInfo.applicationInfo.loadLabel(getPackageManager()).toString();
            appInfo.packageName = packageInfo.packageName;
            appInfo.versionCode = packageInfo.versionCode;
            appInfo.appIcon = packageInfo.applicationInfo.loadIcon(getPackageManager());
            //非系统应用
            if((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0)
            appList.add(appInfo);
        }
// 桌面应用的启动在INTENT中需要包含ACTION_MAIN 和CATEGORY_HOME.
        ArrayList<AppInfo> appList = new ArrayList<>();//存储应用信息
        Intent intent = new Intent();
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setAction(Intent.ACTION_MAIN);
        PackageManager manager = getPackageManager();
        List<ResolveInfo> list = manager.queryIntentActivities(intent, 0);
        //     List<PackageInfo> packageInfos = manager.getInstalledPackages(0);
        for (int i = 0; i < list.size(); i++) {
            AppInfo appInfo = new AppInfo();
            ResolveInfo resolveInfo = list.get(i);
            appInfo.appName = resolveInfo.loadLabel(manager).toString();
            appInfo.packageName = resolveInfo.activityInfo.packageName.toString();

            appInfo.mBitmapBytes = BitmapDrawableExchange.drawableToBytes(resolveInfo.loadIcon(manager));
            //  appInfo.appIcon = (BitmapDrawable) resolveInfo.loadIcon(manager);
            if (!appInfo.packageName.equals("com.example.myapplication")) {
                boolean flag = true;
                if (addedList.size() != 0) {
                    for (int j = 0; j < addedList.size(); j++) {
                        if (appInfo.packageName.equals(addedList.get(j).packageName)) {
                            flag = false;
                        }
                    }

                }
                if (flag)
                    appList.add(appInfo);

            }
    public void startApp(String packageName) {
        Intent intent = MainActivity.this.getPackageManager()
                .getLaunchIntentForPackage(packageName);
        // 已安装包 直接启动
        if (intent != null) {
            startActivity(intent);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值