[TOC]
前言
Android SDK原生 API中,有一些常用的工具类,运用得当可以省事省力省时,何况还是Android官方提供的,现在收集整理一些出来。也许这里面就有你想要的,不用自行写工具类实现了
开发必备
PackageManager.checkSignatures () 检查包签名。
FragmentManager.enableDebugLogging () 开启Fragment的debug日志记录。**
onTrimMemory 内存紧张时候Android系统回调此方法,可以在里面进行内存回收。
TimingLogger,SDK自带打印时间戳工具。可以分析某个方法执行的时间。用以性能分析。
官方文档说明使用方法(翻译):
一个实用程序类,帮助日志计时在方法调用中进行拆分。典型的用法是:
TimingLogger timings = new TimingLogger("TAG", "methodA");
// ... do some work A ...
timings.addSplit("work A");
// ... do some work B ...
timings.addSplit("work B");
timings.dumpToLog(); //输出到日志
The dumpToLog call would add the following to the log:
D/TAG ( 3459): methodA: begin
D/TAG ( 3459): methodA: 9 ms, work A
D/TAG ( 3459): methodA: 1 ms, work B
D/TAG ( 3459): methodA: end, 16 ms
但是,使用的时候会发现,有可能打印不出log,没关系,在命令行输入这条命令:
adb shell setprop log.tag.TAG VERBOSE //注意这里的tag.后面跟的TAG需要和设置的一样
//这条命令的意思是,把TAG为timing的这条log级别设置为VERBOSE,在v以上的Log都能打印出来。
Application.registerActivityLifecycleCallbacks 注册activity的生命周期方法回调。
可以用做全局Activity关闭管理,
获取栈顶Acitivity弹出提示框………………
格式化相关
DateUtils.formatDateTime() 格式化时间日期格式。
DateFormat.format("yyyy-MM-dd HH:mm:ss", System.currentTimeMillis());
DateFormat.format("yy/MM/dd", Calendar.getInstance());
DateFormat.format("yyyy", new Date(2016,11,17));
Formatter.formatFileSize() 处理文件大小格式化工具。把文件大小转换为KB,MB,GB这样的字符串。
PhoneNumberUtils.formatNumber () 格式化电话号码。
DateUtils
Android本身提供的日期时间工具类,里面有很多实用的工具集合。
DateUtils.isToady() 判断传入的日期时间是否为当天。
DateUtils.getRelativeTimeSpanString 可以计算时间间隔比如“几天前”,“几个月前”,等等。
存贮相关
Context.getCacheDir() 获取系统默认的缓存路径。
ActivityManager.clearApplicationUserData() 清理用户产生的数据。恢复的干净的初始阶段。
Environment.getExternalStoragePublicDirectory() 外部存储器公共存储文件夹。
文字相关
Linkify.addLinks() 为一个TextView添加链接。
TextUtils.isEmpty() 判空 同java中StringUtils.isEmpty()
UrlQuerySanitizer 对一个URL链接进行检查和数据提取、解析等。
控件相关
AutoScrollHelper 在滚动View中长按边缘滚动工具类。
ViewStub初始化阶段不加载任何View,然而随后以加载开发者给定布局文件。在懒加载 模式的View初始化过程中适合占位。
ThumbnailUtils 处理缩略图,可以处理本地视频获取第一针图片
android:weightSum 控制根布局总的权重和。(不常用)线性布局权重子控件直接设置亦可
ValueAnimator.reverse() 取消正在执行的动画。
排序
AlphabetIndexer 字母索引类。
SortedList 排序列表。
事务相关(触摸,点击事件分发……)
android:duplicateParentState="true" 子View跟随其Parent的状态,如按击等。比如某个按钮很小,想要扩大其点击区域,通常会再给其包裹一层布局,将点击事件写到Parent上,这时候如果希望被包裹按钮的点击效果对应的Selector继续生效,就这么做。
getParent().requestDisallowInterceptTouchEvent(true) 屏蔽父view对事件的拦截处理。
HandlerThread 用以实现常见的Thread+Handler模型实现的复合型类。
广播消息
LocalBroadcastManager 本地广播。更安全的本地广播机制,类似于EventBus的简化版。
Messenger 对AIDL的简化操作。
界面相关
过渡
android:animateLayoutChanges="true" 使布局中的某些子view的消失和增加具有动画平滑过渡效果。
SurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT) 设置SurfaceView透明。
ArgbEvaluator.evaluate(float fraction, Object startValue, ObjectendValue) 颜色渐变,常见于导航栏、标题栏的颜色。
Fragment
FragmentManager.enableDebugLogging () 开启Fragment的debug日志记录。**
Fragment的setUserVisibleHint 在这个方法里面可以实现Fragment的懒加载,比如:
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if (isVisibleToUser) {
//加载
} else {
//不加载
}
}
这在ViewPager结合Fragment的代码中实现懒加载很有用。因为Android官方默认当创建第一个Fragment时回创建第二个Fragment以确保用户平滑滑动,第二个View已经被创建,这在某些时候会带来一定的加载开销。