21天打卡Andoid学到的一些小知识-第五六天

简介: 今天我们打卡的目标是 Android 10.0 Launcher3 app列表页桌面图标按安装时间排序app图标

今天我们打卡的目标是 Android 10.0 Launcher3 app列表页桌面图标按安装时间排序app图标


在我们日常接触到的定制化开发中,Launcher3相关的定制相关功能是常有的事情,系统默认的app列表页的Icon是按照app名称排序的,同时也会有各种各样的,而今天我们引入安安装时间排序app图标在一定限度上也方便了用户去寻找自己所下载的相关app


按安装时间排序app图标的功能实现分析


在Launcher3中首选找到排序在哪,然后查看排序方法


AlphabeticalAppsList.java 就是负责排序 主要排序的就是Collections.sort(mApps, mAppNameComparator);来负责排序


Collections.sort() 方法 :

Collections.sort(List, new PriceComparator()); 的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对List进行排序。


Collections类中的sort方法可以实现对List接口的集合进行排序。这个方法假定列表元素实现了Comparable接口。

在java文档中查询发现存在两种实现过程


第一种

static <T extends Comparable<? super T>> void sort(List<T> list)

第二种:


public static <T> void sort(List<T> list,Comparator<? super T> c)

Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。


若一个类实现了Comparable接口,就意味着“该类支持排序”。 假设“有一个List列表(或数组),里面的元素是实现了Comparable接口的类”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。


此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。


Comparator接口里面有一个compare方法,方法有两个参数X1和X2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int,有三种情况:


(1) X1大于X2,返回正整数


(2) X1等于X2,返回0


(3) X1小于X2,返回负整数


附:其实现主要代码以及代码分析在打卡官方文档中出现,有兴趣的大家也可以去官方帖下面去进行学习,链接会在文章最后放出。


主要实现代码:

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@Override
public int compare(AppInfo a, AppInfo b) {
// Order by the title in the current locale
/int result = mLabelComparator.compare(a.title.toString(), b.title.toString());if (result != 0) {return result;}/
    //add code start
    String a_packagename = a.componentName.getPackageName();
  String b_packagename = b.componentName.getPackageName();
  int result = getInstallTime(a_packagename).compareTo(getInstallTime(b_packagename));
    if (result != 0) {
        return result;
    }
   //add code end
    // If labels are same, compare component names
    result = a.componentName.compareTo(b.componentName);
    if (result != 0) {
        return result;
    }
    if (mMyUser.equals(a.user)) {
        return -1;
    } else {
        Long aUserSerial = mUserManager.getSerialNumberForUser(a.user);
        Long bUserSerial = mUserManager.getSerialNumberForUser(b.user);
        return aUserSerial.compareTo(bUserSerial);
    }
}
//根据包名获取安装时间
public String getInstallTime(String packageName){
  String installtime ="";
  try {
        PackageManager mPackageManager = mContext.getPackageManager();
        PackageInfo packageInfo = mPackageManager.getPackageInfo(packageName,0);
        installtime = packageInfo.firstInstallTime+"";
        android.util.Log.e("MainActivity","packageName:"+packageName+"--installtime:"+installtime);
    } catch (Exception e) {
        e.printStackTrace();
    }
  return installtime;
}
相关文章
|
2月前
|
人工智能 安全 物联网
Android与iOS:移动操作系统的双雄争霸
在智能手机市场中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体和独特的生态系统。本文将深入探讨这两种系统的发展历程、技术特点、市场表现以及未来趋势,以期为读者提供全面而深入的了解。通过对比分析,我们可以发现,尽管Android和iOS在某些方面存在竞争关系,但它们也在相互借鉴中不断进步和完善。
|
3月前
|
安全 搜索推荐 Android开发
Android vs. iOS:一场永无止境的较量####
在智能手机操作系统领域,Android与iOS犹如两极,各自引领着不同的技术潮流和用户体验哲学。本文深入探讨了这两个平台的发展历程、核心优势、以及它们如何塑造了我们的数字生活,旨在为读者提供一个全面而客观的视角,理解这场持续多年的“战争”背后的真正意义。 ####
|
3月前
|
搜索推荐 Android开发 iOS开发
Android vs iOS:探索移动操作系统的双峰对决###
【10月更文挑战第25天】 本文深入剖析了Android与iOS这两大主流移动操作系统,从它们的哲学起源、核心特性、用户体验到市场表现进行了全面对比。旨在帮助读者理解两者的差异与优势,为选择或开发应用提供有价值的参考。 ###
46 0
|
3月前
|
安全 Android开发 iOS开发
安卓系统与iOS系统的比较####
【10月更文挑战第26天】 本文将深入探讨安卓(Android)和iOS这两大主流移动操作系统的各自特点、优势与不足。通过对比分析,帮助读者更好地理解两者在用户体验、应用生态、系统安全等方面的差异,从而为消费者在选择智能手机时提供参考依据。无论你是技术爱好者还是普通用户,这篇文章都将为你揭示两大系统背后的故事和技术细节。 ####
114 0
|
6月前
|
机器学习/深度学习 Android开发 iOS开发
探索移动应用开发的未来:Android与iOS的较量
【8月更文挑战第21天】在数字时代的浪潮中,移动应用已成为日常生活不可或缺的一部分。两大主流平台,Android和iOS,各自以其独特的优势和挑战塑造着开发者和用户的世界。本文将深入探讨这两个平台的发展动态、设计理念及其对移动应用开发未来的影响。
|
6月前
|
IDE 开发工具 Android开发
探索iOS与安卓开发的差异性
【8月更文挑战第9天】在移动应用开发的广阔天地中,iOS和安卓这两大平台各自占据了半壁江山。它们在设计理念、开发环境、用户体验等方面展现出独特的差异性。本文将深入探讨这两个平台的开发过程,揭示它们之间的主要区别,并分析这些差异如何影响开发者的决策和应用的性能。通过比较分析,我们将理解每个平台的优势和局限性,以及如何根据项目需求选择合适的开发路径。
|
传感器 Java Android开发
21天打卡Andoid学到的一些小知识-第七八天
今天我们打卡学习的内容是Android 10.0 修改导航栏横屏固定在底部显示,首先声明此次打卡学习的链接文章链接将会放置文章最后处,有需要的小伙伴可以自行去查阅观看。
162 0
|
Android开发
21天打卡Andoid学到的一些小知识-第三四天
今天我想要为大家介绍的是Android 10.0 SystemUI默认去掉底部导航栏这个知识,希望通过我的介绍可以让你了解一部分知识,好吧,废话少说 直接进入正题。
93 0
|
Linux Apache Android开发
21天打卡Andoid学到的一些小知识-第一二天
活动地址:CSDN21天学习挑战赛
92 0

热门文章

最新文章