android每日阅读笔记汇总

android 四大组件之一 Activity

Activity的任务栈分析

resultCode为RESULT_CANCEL的原因

如果Activity的启动模式为SingleInstance或者singleTask的话.调用onActivityForResult会立即返回RESULT_CANCEL的请求码.

启用任务栈

  • [置顶] Activity启动模式 及 Intent Flags 与 栈 的关联分析(16/01/27)
    (关键字:taskAffinity,FLAG_ACTIVITY_NEW_TASK ,FLAG_ACTIVITY_NO_HISTORY,任务栈)
  • Android 群英传

    1. clearTaskOnLaunch 在Manifest中的属性:
      每次在返回该Acvitity时,都将该Activity之上的所有Activity都清除.通过这个属性,可以让这个Task每次在初始化的时候,都只有这一个Activity.
    2. finishOnTaskLaunch 与clearTaskOnLaunch类似,只不过clearTaskOnLaunch作用在别人身上,而finishOnTaskLaunch作用在自己身上.通过这个属性,当离开这个Activity所处的Task,那么用户再返回时,该Activity就会被finish掉.
    3. alwaysRetainTaskState
      这个属性给了Task一道”免死金牌”,如果将Activity这个属性设置为True,那么该Activity所在的Task将不接受任何清理命令

Activity的自动销毁保存数据机制–onSaveInstanceState

对于这两个方法的触发时机:

对于 Android L中新加入的带有PersistableBundle参数的三个方法的介绍:


android Fragment

Fragment与Activity的交互


android View

onSizeChange

onDraw

自定义ViewGroup过程

与 View 共有但不类似的绘制过程

关于ViewGroup中的Scroller简介

使用ViewDragHelper做出更好的滑动定制效果

一些实用技巧


android 列表

对于魅族中的ListView会出现下拉悬停的解决方法

列表中的其他有用部分


android 图像处理

使用bitmap xml做成有重复排版效果的drawable资源效果

  • XML Bitmap(16/01/26)
    (关键字:Bitmap,xml,tileMode)

使用Shape做出各种有趣的效果

Shape中的Gradient下的Angle属性的作用详解

使用Shader对画笔或者图像进行操作处理

使用Xfermode实现图片混合效果

(16/01/27)
(关键字:Xfermode,圆角图片,混合图层,混合通道))


android系统

获取android设备中的可用内存

ActivityManager.MemoryInfo中有几个非常重要的字段,availMem–系统可能上,totalMem–总内存,threshold–低内存的阈值,即区分是否低内在的临界值,lowMemory–是否处于低 内存.

  • Android开发学习笔记(十二) 获取系统可用内存(16/01/01)
    (关键字:Formatter,内存,MemoryInfo)
  • anrdoid群英传(16/01/01)

    使用 ActivityManager下的RunningAppProocessInfo可以获取到运行进程的信息,比如说以下信息:

    • processName,进程名字
    • pid,进程pid
    • udi,进程uid
      1
      2
      3
      4
      5
      6
      7
      //使用ActivityManager下的MemoryInfo去获取内存信息.
      ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
      am.getMemoryInfo(memoryInfo);
      tv.append(Formatter.formatFileSize(this, memoryInfo.availMem) + ",");
      tv.append(memoryInfo.lowMemory + ",");
      tv.append(Formatter.formatFileSize(this, memoryInfo.threshold) + ",");
      tv.append(Formatter.formatFileSize(this, memoryInfo.totalMem) + ",");

    这样就基本可以知道某些手机卫士的工作原理了.

    而RunningServiceInfo与上面类似可以获取所有当前运行的服务,这项功能可以用来判断服务是否存在以完成某些特定的功能,比如初始化UI,或者也类似于360的优化内存功能.
    Debug.MemoryInfo 类中能通过pid去检索所占用的内存空间.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    List<ActivityManager.RunningAppProcessInfo> infos = am.getRunningAppProcesses();
    for (ActivityManager.RunningAppProcessInfo info : infos) {
    int pid = info.pid;
    int uid = info.uid;
    String processName = info.processName;
    Debug.MemoryInfo memoryInfo = am.getProcessMemoryInfo(new int[]{pid})[0];
    int totalPss = memoryInfo.getTotalPss();
    int dalvikPss = memoryInfo.dalvikPss;
    tv.append(pid + ",");
    tv.append(uid + ",");
    tv.append(processName + ",");
    tv.append(totalPss + ",");
    tv.append(dalvikPss + ".");
    }

(关键字:ActivityManager,Info,应用信息,系统内存)

使用google提供的工具进行反编译

今天花了很多时间在尝试反编译,都出现很多问题的情况下,收集了很多相关的网站,以方便遇到同样问题的人能更好的解决而不必折腾.

使用Android Studio设置签名;多渠道打包

引言
在使用apktool 进行反编译打包的,然后在手机进行安装会出现解析错误,不能安装的错误.上网看了一下,需要设置相应的签名才能安装
(所以使用别人的资源重打包的时候如果 想覆盖别人的应用 ,就需要用到别人的签名,极大程度的保护了android的应用),但是如果仅仅用在汉化的用途,就可以用第二套应用.解决了这个疑问.


android 设计

Material Design

Toolbar

透明状态栏实战


android 优化

android 自定义View 优化

分析方法卡顿的神器TraceView

追踪内存泄露的圣器 MAT–(MemoryAnalyzerTool)

android 内存泄露

引言

在MVP模式中,可以将Presenter中的mActivity设置成弱引用,这样如果在Presenter中要执行一些耗时操作而持有activity不能被回收导致内存泄露的情况发生.
那么,如果设置成弱引用不会出现随意被垃圾收集器处理的情况,而出现Presenter引用到activity对象的null情况吗?
答案: 在android 原生的某个地方已经将activity设置为强引用了,这也是activity的生命周期的实现原理,所以此时不需要担心这个问题,而需要注意当系统本应该清除activity时候能保证也能正常处理就行了.


Android 工具

Android 开发官方IDE:Android Studio

快捷键及使用技巧大全

其下的Gradle

生动生成工具

代码规范检测工具Lint

内嵌在Android Studio 中的一个工具,可以自己定义出需要的代码约束及提示.

静态代码检查工具Coverity

这个库适用于Java,十分强大,能检测出类似单例模式中DCL写法不易发现的问题

Android 代码搜索神器 – Codota

正如codota 官方所说,的确是精品,他的搜索源,不仅只有Github,而且还有知名博客和开发者网站,让你搜索一个东西,不用在找上半天;

工具收藏大全

IDEAVim

Stetho(FaceBook出品)


Android 新特性

Android 6.0 MashMallow


Android 架构

MVP模式

响应式编程: RxJava

RESTful模式 以及 Retrofit