Android开发中,那些让你觉得相见恨晚的方法、类或接口



Android(Java)开发中,有哪些方法、类或接口很实用,但是你却没能在第一时间知道它?有一天你发现它时,只想说一句:“What the fuck,还有这个!”

1、Throwable接口中的getStackTrace()方法(或者Thread类的getStackTrace()方法),根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[];

2、StackTraceElement类,其中四个方法getClassName()getFileName()getLineNumber()getMethodName()在调试程序打印Log时非常有用;

3.UncaughtExceptionHandler接口,再好的代码异常难免,利用此接口可以对未捕获的异常善后; 使用参见:Android使用UncaughtExceptionHandler捕获全局异常

4.Resources类中的getIdentifier(name, defType, defPackage)方法,根据资源名称获取其ID,做UI时经常用到;

5.View中的isShown()方法,以前都是用view.getVisibility() == View.VISIBLE来判断的(╯□╰);(这里面其实有一个坑:【android】view.isShown ()的用法

6.Arrays类中的一系列关于数组操作的工具方法:binarySearch(),asList(),equals(),sort(),toString(),copyOfRange()等; Collections类中的一系列关于集合操作的工具方法:sort(),reverse()等;

7.android.text.format.Formatter类中`formatFileSize(Context, long)方法,用来格式化文件Size(B → KB → MB → GB);

8.android.media.ThumbnailUtils类,用来获取媒体(图片、视频)缩略图;

9.String类中的format(String, Object...)方法,用来格式化strings.xml中的字符串Context类中getString(int, Object... )方法用起来更加方便);

10.View类中的三个方法:callOnClick(),performClick(),performLongClick(),用于触发View的点击事件

11.TextUtils类中的isEmpty(CharSequence)方法,判断字符串是否为null或"";

12.TextView类中的append(CharSequence)方法,添加文本。一些特殊文本直接用+连接会变成String;

13.View类中的getDrawingCache()等一系列方法,目前只知道可以用来截图;

14.Fragment类中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()时貌似Fragment的其它生命周期方法都不会被调用,太坑爹

15.View类中的getLocationInWindow(int[])方法和getLocationOnScreen(int[])方法,获取View在窗口/屏幕中的位置;

16.ViewConfiguration.getScaledTouchSlop()使用 ViewConfiguration 中提供的值以保证所有触摸的交互都是统一的。这个方法获取的值表示:用户的手滑动这个距离后,才判定为正在进行滑动.当然这个值也可以自己来决定.但是为了一致性,还是使用标准的值较好。

17.ContextThemeWrapper 方便在运行的时候修改主题。

18.ValueAnimator.reverse() 这个方法可以很顺利地取消正在运行的动画。

19.Messenger,AIDL 实现的封装,比手写 AIDL 更方便。

20 LocalBroadcastManager 可以在App的范围内发广播和收广播,不会被global的receiver收到,对数据比较敏感且不用共享的可以用这个。

21.runOnuithread. 和 view.post省了取handler过程;

22.AS自动生成的BuildConfig.java,里面的参数可以在build.gradle里面定义和配置。

23.第三方SQlite数据库,DBFlow.

24.android:duplicateParentState="true",让子View跟随其Parent的状态,如pressed等。常见的使用场景是某些时候一个按钮很小,我们想要扩大其点击区域的时候通常会再给其包裹一层布局,将点击事件写到Parent上,这时候如果希望被包裹按钮的点击效果对应的Selector继续生效的话,这时候duplicateParentState就派上用场了。

25.ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue); 用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。

26.Palette,5.0加入的可以提取一个Bitmap 中突出颜色的类,结合上面的Bitmap.extractAlpha,你懂的。

整理自 知乎