android 比较有用的方法总结

  1. Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[];
  2. StackTraceElement类,其中四个方法getClassName(),getFileName(),getLineNumber(),getMethodName()在调试程序打印Log时非常有用;
  3. UncaughtExceptionHandler接口,再好的代码异常难免,利用此接口可以对未捕获的异常善后;
  4. Resources类中的getIdentifier(name, defType, defPackage)方法,根据资源名称获取其ID,做UI时经常用到;
  5. View中的isShown()方法用于判断当前View是否是展示状态。
  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中的字符串;
  10. View类中的三个方法:callOnClick(),performClick(),performLongClick(),用于触发View的点击事件;
  11. TextUtils类中的isEmpty(CharSequence)方法,判断字符串是否为null或”“;
  12. TextView类中的append(CharSequence)方法,添加文本。一些特殊文本直接用+连接会变成String;
  13. View类中的getDrawingCache()等一系列方法,目前只知道可以用来截图;
  14. DecimalFormat类,用于字串格式化包括指定位数、百分数、科学计数法等;
  15. System类中的arraycopy(src, srcPos, dest, destPos, length)方法,用来copy数组;
  16. Fragment类中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()时貌似Fragment的其它生命周期方法都不会被调用,太坑爹!
  17. Activity类中的onWindowFocusChanged(boolean),onNewIntent(intent)等回调方法;
  18. View类中的getLocationInWindow(int[])方法和getLocationOnScreen(int[])方法,获取View在窗口/屏幕中的位置
  19. TextView类中的setTransformationMethod(TransformationMethod)方法,可用来实现“显示密码”功能;
  20. TextWatcher接口,用来监听文本输入框内容的改变,可用来实现一系列具有特殊功能的文本输入框;
  21. View类中的setSelected(boolean)方法结合android:state_selected=”“用来实现图片选中效果;
  22. Surface设置透明:SurfaceView.setZOrderOnTop(true); SurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);但是会挡住其它控件;
  23. ListView或GridView类中的setFastScrollEnabled(boolean)方法,用来设置快速滚动滑块是否可见,当然前提是item够多;
  24. PageTransformer接口,用来自定义ViewPager页面切换动画,用setPageTransformer(boolean, PageTransformer)方法来进行设置;
  25. apache提供的一系列jar包:commons-lang.jar,commons-collections.jar,commons-beanutils.jar等,里面很多方法可能是你曾经用几十几百行代码实现过的,但是执行效率或许要差很多,比如:ArrayUtils,StringUtils……;
  26. AndroidTestCase类,Android单元测试,在AndroidStudio中使用非常方便;
  27. TextView类的setKeyListener(KeyListener)方法;其中DigitsKeyListener类,使用getInstance(String accepted)方法即可指定EditText可输入字符集;
  28. ActivityLifecycleCallbacks接口,用于在Application类中监听各Activity的状态变化;
  29. Context类中的createPackageContext(packageName, flags)方法,可用来获取指定包名应用程序的Context对象。
  30. Activity.startActivities() 常用于在应用程序中间启动其他的Activity。
  31. Html.fromHtml() 用于生成一个Html,参数可以是一个字符串.个人认为它不是很快,所以我不怎么经常去用.(我说不经常用它是为了重点突出这句话:请多手动构建 Spannable 来替换 Html.fromHtml),但是它对渲染从 web 上获取的文字还是很不错的。
  32. TextView.setError() 在验证用户输入的时候很棒。
  33. Build.VERSION_CODES 这个标明了当前的版本号,在处理兼容性问题的时候经常会用到.点进去可以看到各个版本的不同特性
  34. LayoutInflater.from() 顾名思义,用于Inflate一个layout,参数是layout的id.这个经常写Adapter的人会用的比较多。
  35. Context.getCacheDir() 获取缓存数据文件夹的路径,很简单但是知道的人不多,这个路径通常在SD卡上(这里的SD卡指的是广义上的SD卡,包括外部存储和内部存储)Adnroid/data/您的应用程序包名/cache/ 下面.测试的时候,可以去这里面看是否缓存成功.缓存在这里的好处是:不用自己再去手动创建文件夹,不用担心用户把自己创建的文件夹删掉,在应用程序卸载的时候,这里会被清空,使用第三方的清理工具的时候,这里也会被清空
  36. ValueAnimator.reverse() 这个方法可以很顺利地取消正在运行的动画。
  37. DateUtils.formatDateTime() 用来进行区域格式化工作,输出格式化和本地化的时间或者日期。
  38. AlarmManager.setInexactRepeating 通过闹铃分组的方式省电,即使你只调用了一个闹钟,这也是一个好的选择,(可以确保在使用完毕时自动调用 AlarmManager.cancel ()。原文说的比较抽象,这里详细说一下:setInexactRepeating指的是设置非准确闹钟,使用方法:alarmManager.setInexactRepeating(AlarmManager.RTC, startTime,intervalL, pendingIntent),非准确闹钟只能保证大致的时间间隔,但是不一定准确,可能出现设置间隔为30分钟,但是实际上一次间隔20分钟,另一次间隔40分钟。它的最大的好处是可以合并闹钟事件,比如间隔设置每30分钟一次,不唤醒休眠,在休眠8小时后已经积累了16个闹钟事件,而在手机被唤醒的时候,非准时闹钟可以把16个事件合并为一个, 所以这么看来,非准时闹钟一般来说比较节约能源。
  39. ActionBar.hide()/.show() 顾名思义,隐藏和显示ActionBar,可以优雅地在全屏和带Actionbar之间转换。
  40. StaticLayout 在自定义 View 中渲染文字的时候很实用
  41. Activity.onBackPressed() 很方便的管理back键的方法,有时候需要自己控制返回键的事件的时候,可以重写一下。比如加入 “点两下back键退出” 功能。
  42. ActivityManager.getMemoryClass() 告诉你你的机器还有多少内存,在计算缓存大小的时候会比较有用。
  43. ViewStub 它是一个初始化不做任何事情的 View,但是之后可以载入一个布局文件。在慢加载 View 中很适合做占位符。唯一的缺点就是不支持标签,所以如果你不太小心的话,可能会在视图结构中加入不需要的嵌套。
  44. SystemClock.sleep() 这个方法在保证一定时间的 sleep 时很方便,通常我用来进行 debug 和模拟网络延时。
  45. Pair.create() 方便构建类和构造器的方法。
  46. Fragment.setArguments——因为在构建 Fragment 的时候不能加参数,所以这是个很好的东西,可以在创建 Fragment 之前设置参数(即使在 configuration 改变的时候仍然会导致销毁/重建)
  47. LocalBroadcastManager——这个会比全局的 broadcast 更加安全,简单,快速。像 otto 这样的 Event buses 机制对你的应用场景更加有用。
  48. Activity.recreate ()——强制让 Activity 重建。
  49. PackageManager.checkSignatures ()——如果同时安装了两个 app 的话,可以用这个方法检查。如果不进行签名检查的话,其他人可以轻易通过使用一样的包名来模仿你的 app。
  50. Activity.isChangingConfigurations ()——如果在 Activity 中 configuration 会经常改变的话,使用这个方法就可以不用手动做保存状态的工作了。
  51. ViewTreeObserver——这是一个很棒的工具。可以进入到 VIew 里面,并监控 View 结构的各种状态,通常我都用来做 View 的测量操作(自定义视图中经常用到)。
  52. DatabaseUtils——一个包含各种数据库操作的使用工具。android:weightSum (LinearLayout)——如果想使用 layout weights,但是却不想填充整个 LinearLayout 的话,就可以用 weightSum 来定义总的 weight 大小。
  53. android:enterFadeDuration/android:exitFadeDuration (Drawables)——此属性在 Drawable 具有多种状态的时候,可以定义它展示前的淡入淡出效果。
  54. android:scaleType (ImageView)——定义在 ImageView 中怎么缩放/剪裁图片,一般用的比较多。
  55. ViewDragHelper ——视图拖动是一个比较复杂的问题。这个类可以帮助解决不少问题。如果你需要一个例子,DrawerLayout就是利用它实现扫滑。
  56. Actionbar.getThemrContext()——导航栏的主题化是很复杂的(不同于Activity其他部分的主题化)。你可以得到一个上下文(Context),用这个上下文创建的自定义组件可以得到正确的主题。ThumbnailUtils——帮助创建缩略图。通常我都是用现有的图片加载库(比如,Picasso 或者 Volley),不过这个ThumbnaiUtils可以创建视频缩略图。译者注:该API从V8才开始支持。
  57. Context.getExternalFilesDir()———— 申请了SD卡写权限后,你可以在SD的任何地方写数据,把你的数据写在设计好的合适位置会更加有礼貌。这样数据可以及时被清理,也会有更好的用户体验。此外,Android 4.0 Kitkat中在这个文件夹下写数据是不需要权限的,每个用户有自己的独立的数据存储路径。
  58. SparseArray——Map的高效优化版本。推荐了解姐妹类SparseBooleanArray、SparseIntArray和SparseLongArray。PackageManager.setComponentEnabledSetting()——可以用来启动或者禁用程序清单中的组件。对于关闭不需要的功能组件是非常赞的,比如关掉一个当前不用的广播接收器。
  59. View.generateViewId()——每次我都想要推荐动态生成控件的ID。需要注意的是,不要和已经存在的控件ID或者其他已经生成的控件ID重复。
  60. ActivityManager.clearApplicationUserData()—— 一键清理你的app产生的用户数据,可能是做用户退出登录功能,有史以来最简单的方式了。
  61. Context.createConfigurationContext() ——自定义你的配置环境信息。
  62. ActivityOptions ——方便的定义两个Activity切换的动画。 使用ActivityOptionsCompat 可以很好解决旧版本的兼容问题。
  63. android:clipChildren 和 android:clipToPadding:clipToPadding就是说控件的绘制区域是否在padding里面的,true的情况下如果你设置了padding那么绘制的区域就往里 缩,clipChildren是指子控件是否超过padding区域,这两个属性默认是true的,所以在设置了padding情况下,默认滚动是在 padding内部的,要达到上面的效果主要把这两个属性设置了false那么这样子控件就能画到padding的区域了。
  64. Fragment 的 setUserVisibleHint 方法,可实现 fragment 对用户可见时才加载资源(延迟加载)。
  65. 自定义 View 时重写 hasOverlappingRendering 方法指定 View 是否有 Overlapping 的情况,提高渲染性能。
  66. AutoScrollHelper,在可滚动视图中长按边缘实现滚动,Android View.OnTouchListener 的子类。
  67. TouchSlop,系统所能识别出的被认为是最小的滑动距。离,ViewConfiguration.get(context).getScaledTouchSlop()。
  68. VelocityTracker,可用于 View 滑动事件速度跟踪。
  69. AlphabetIndexer,字母索引辅助类。
  70. Messenger,AIDL 实现的封装,比手写 AIDL 更方便。
  71. ArrayMap,比 HashMap 更高的内存效率,但比 HashMap 慢,不适合有大量数据的场景。
  72. Property,抽象类,封装出对象中的一个易变的属性值,使用场景如在使用属性动画时对动画属性的操作。
  73. getParent().requestDisallowInterceptTouchEvent(true);剥夺父view对touch事件的处理权。
  74. ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。
  75. Bitmap.extractAlpha ();返回一个新的Bitmap,capture原始图片的alpha值。有的时候我们需要动态的修改一个元素的背景图片又不希望使用多张图片的时候,通过这个方法,结合Canvas和Paint可以动态的修改一个纯色Bitmap的颜色。
  76. HandlerThread,代替不停new Thread开子线程的重复体力写法
  77. IntentService,一个可以干完活后自己去死且不需要我们去管理子线程的Service。
  78. Executors. newSingleThreadExecutor();这个是java的,之前不知道它,自己花很大功夫去研究了单线程顺序执行的任务队列。
  79. android:animateLayoutChanges=”true”,LinearLayout中添加View的动画的办法,支持通过setLayoutTransition()自定义动画。
  80. ViewDragHelper,自定义ViewGroup处理各种事件很累吧.
  81. ViewFlipper,实现多个view的切换(循环),可自定义动画效果,且可针对单个切换指定动画。
  82. 有朋友提到了在自定义View时有些方法在开启硬件加速的时候没有效果的问题。
  83. android util包中的Pair类,可以方便的用来存储一”组”数据。注意不是key value。
  84. PointF,graphics包中的一个类,我们经常见到在处理Touch事件的时候分别定义一个downX,一个downY用来存储一个坐标,如果坐标少还好,如果要记录的坐标过多那代码就不好看了。用PointF(float x, float y);来描述一个坐标点会清楚很多。
  85. StateListDrawable,定义Selector通常的办法都是xml文件,但是有的时候我们的图片资源可能是从服务器动态获取的,比如很多app所谓的皮肤,这种时候就只能通StateListDrawable来完成了,各种addState即可。
  86. android:descendantFocusability,ListView的item中CheckBox等元素抢焦点导致item点击事件无法响应时,除了给对应的元素设置 focusable,更简单的是在item根布局加上android:descendantFocusability=”blocksDescendants”
  87. android:duplicateParentState=”true”,让子View跟随其Parent的状态,如pressed等。常见的使用场景是某些时候一个按钮很小,我们想要扩大其点击区域的时候通常会再给其包裹一层布局,将点击事件写到Parent上,这时候如果希望被包裹按钮的点击效果对应的Selector继续生效的话,这时候duplicateParentState就派上用场了。
  88. ViewConfiguration.getScaledTouchSlop();触发移动事件的最小距离,自定义View处理touch事件的时候,有的时候需要判断用户是否真的存在movie,系统提供了这样的方法。
  89. onTrimMemory,在Activity中重写此方法,会在内存紧张的时候回调(支持多个级别),便于我们主动的进行资源释放,避免OOM。
  90. EditTxt.setImeOptions, 使用EditText弹出软键盘时,修改回车键的显示内容(一直很讨厌用回车键来交互,所以之前一直不知道这玩意儿)
  91. LocalBroadcastManager 可以在App的范围内发广播和收广播,不会被global的receiver收到,对数据比较敏感且不用共享的可以用这个。
  92. 通过 WindowManager.addView 在其他app界面添加一个view时,经常会无法显示,特别在miui,emui固件上,需要指定type为LayoutParams.TYPE_TOAST。
  93. View.getLocationOnScreen(new int[]),获取view在屏幕上的位置
  94. Paint.setXfermode(porterDuffXfermode),在ApiDemo里面有专门的介绍,实现了穿透,叠加,覆盖等多种绘制效果,非常实用
  95. IBinder binder = ServiceManager.getService(“wallpaper”); IWallpaperManager wm = IWallpaperManager.Stub.asInterface(binder); Bundle params = new Bundle(); ParcelFileDescriptor fd = wm.getWallpaper(stub, params); 直接获取当前系统壁纸的fd,避免壁纸过大造成oom问题
  96. android.support.v4.widget.DrawerLayout原生大方的抽屉控件
  97. android.support.v7.widget.Toolbar定制性极强的viewGroup
  98. AtomicInteger,一个提供原子操作的Integer的类。
  99. onbackpressed() 返回;
  100. runOnuithread. 和 view.post省了取handler过程;
  101. CountDownTimer android定义的定时操作类
  102. listvie.setEmptyview
  103. BaseAdapter.notifyDataSetChanged();
  104. context.getFilesDir();// /data/data//files
  105. context.getCacheDir();// /data/data//cache
  106. context.getExternalCacheDir(); // /sdcard/Android/data//files
  107. // system/app ——– 系统自带的应用程序,获取adb root权限才能删除
    // data/app ——– 用户程序安装时的目录,安装时
    // data/data ——– 存放应用程序的数据
    // data/dalvik-cache - 将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)
    context.getFilesDir();// /data/data//files
    context.getCacheDir();// /data/data//cache
    context.getExternalCacheDir(); // /sdcard/Android/data//files

你可能感兴趣的:(android)