android 四大组件之一 Activity
Activity的任务栈分析
resultCode为RESULT_CANCEL的原因
如果Activity的启动模式为SingleInstance或者singleTask的话.调用onActivityForResult会立即返回RESULT_CANCEL的请求码.
- [Android]startActivityForResult启动singleTask的Activity,则onActivitResult()立即回调且resultCode为RESULT_CANCEL(16/01/27)
(关键字:RESULT_CANCEL,Activity,resultCode,SingleTask,SingleInstance)
启用任务栈
- [置顶] Activity启动模式 及 Intent Flags 与 栈 的关联分析(16/01/27)
(关键字:taskAffinity,FLAG_ACTIVITY_NEW_TASK ,FLAG_ACTIVITY_NO_HISTORY,任务栈) Android 群英传
- clearTaskOnLaunch 在Manifest中的属性:
每次在返回该Acvitity时,都将该Activity之上的所有Activity都清除.通过这个属性,可以让这个Task每次在初始化的时候,都只有这一个Activity. - finishOnTaskLaunch 与clearTaskOnLaunch类似,只不过clearTaskOnLaunch作用在别人身上,而finishOnTaskLaunch作用在自己身上.通过这个属性,当离开这个Activity所处的Task,那么用户再返回时,该Activity就会被finish掉.
- alwaysRetainTaskState
这个属性给了Task一道”免死金牌”,如果将Activity这个属性设置为True,那么该Activity所在的Task将不接受任何清理命令
- clearTaskOnLaunch 在Manifest中的属性:
Activity的自动销毁保存数据机制–onSaveInstanceState
对于这两个方法的触发时机:
- onSaveInstanceState和onRestoreInstanceState触发的时机(16/01/28)
(关键字:onSaveInstanceState、onRestoreInstanceState、触发时机) - onSaveInstanceState(Bundle outState)的调用时机(16/01/28)
(关键字:onSaveInstanceState、没有PersistableBundle)
注意:是没有PersistableBundle参数的onSaveInstanceState.
对于 Android L中新加入的带有PersistableBundle参数的三个方法的介绍:
- Android实战技巧之二十六:persistableMode与Activity的持久化
(16/01/28)
(关键字:PersistableBundle,持久化,activity)
android Fragment
Fragment与Activity的交互
- API拾遗录之Fragment(其中有各种Menus的交互)(16/01/25)
(关键字:OptionsMenu交互,setHasOptionsMenu,Fragment,回调)
android View
onSizeChange
- android 系统回调onSizeChange, onMeasure, onLayout调用时机(16/01/22)
- android之View的启动过程,有简单的onSizeChange调用时机分析(16/01/22)
onDraw
- Android中Paint字体属性的设置(16/01/22)
(关键字:Paint,Style,FIll,STROKE) - android中invalidate()的自动清屏含义以及屏幕刷新(16/01/22)
(关键字:invalidate,onDraw) - Android Canvas drawArc方法介绍(16/01/22)
(关键字:弧形,drawArc,canvas) - Android中View绘制流程以及invalidate()等相关方法分析(16/01/22)
(关键字:invalidate,绘制流程,onDraw)
自定义ViewGroup过程
与 View 共有但不类似的绘制过程
- Android onMeasure、Measure、measureChild、measureChildren 一些简要说明(16/01/24)
(关键字:measureChild,ViewGroup)
关于ViewGroup中的Scroller简介
- Android Scroller简单用法(16/01/24)
(关键字:Scroller,ViewGroup) - Android中Scroller类的分析(16/01/24)
(关键字:Scroller,invalidate,computeScroll) - android 使用Scroller实现缓慢移动(16/01/24)
(关键字:Scroller,computeScroll调用时机) - 对于getScrollX() 的理解(16/01/24)
(关键字:SCroller,getScrollX) - Android中滑屏实现—-手把手教你如何实现触摸滑屏以及Scroller类详解(16/01/24)
(关键字:滑屏,Scroller)
使用ViewDragHelper做出更好的滑动定制效果
- Android ViewDragHelper完全解析 自定义ViewGroup神器(16/01/25)
(关键字:ViewDragHelper,侧滑,边界捕获,非正常捕获,事件消耗,滑动事件周期)
一些实用技巧
- New UI-妙用view的keepScreenOn属性保持屏幕常亮(16/01/27)
(关键字:常亮)
android 列表
对于魅族中的ListView会出现下拉悬停的解决方法
- 魅族手机中屏蔽ListView下拉悬停方法(16/01/24)
(关键字:ListView,魅族适配,下拉悬停)
列表中的其他有用部分
- ViewConfiguration.getScaledTouchSlop () 用法
(关键字:ViewConfiguration,ScaleTouchSlop,各种列表参数)
android 图像处理
使用bitmap xml做成有重复排版效果的drawable资源效果
- XML Bitmap(16/01/26)
(关键字:Bitmap,xml,tileMode)
使用Shape做出各种有趣的效果
Shape中的Gradient下的Angle属性的作用详解
- Android (shape,gradient)使用总结(16/01/26)
(关键字:Shape,Gradient,Angle)
使用Shader对画笔或者图像进行操作处理
- Android BitmapShader实现圆形和圆角图片(16/01/23)
(关键字:Shader,圆角) - Android学习笔记进阶15之Shader渲染(16/01/23)
(关键字: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
14List<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,应用信息,系统内存)
- Android中如何查看内存(上)(16/01/01)
(关键字:底层,内存,pss,dalvik,ActivityManager,MemoryInfo,adb,shell)
使用google提供的工具进行反编译
今天花了很多时间在尝试反编译,都出现很多问题的情况下,收集了很多相关的网站,以方便遇到同样问题的人能更好的解决而不必折腾.
- Android APK反编译就这么简单 详解(附图)(16/01/19)
(关键字:反编译,重打包,apktool,dex2jar,jd-gui) - brut.androlib.err.UndefinedResObject(完美解决)apktool反编译问题(16/01/19)
(关键字:反编译,UndefinedResObject异常,apktool) - Apktool相关权威网站,有详细指导过程及常见问题(16/01/19)
(关键字:apktool) - ApkTool反编译和重新打包(16/01/21)
(关键字:apktool,重打包,签名,smali简单语法)
使用Android Studio设置签名;多渠道打包
引言
在使用apktool 进行反编译打包的,然后在手机进行安装会出现解析错误,不能安装的错误.上网看了一下,需要设置相应的签名才能安装
(所以使用别人的资源重打包的时候如果 想覆盖别人的应用 ,就需要用到别人的签名,极大程度的保护了android的应用),但是如果仅仅用在汉化的用途,就可以用第二套应用.解决了这个疑问.
- [Android Studio 权威教程]打包、生成jks密钥、签名Apk、多渠道打包(16/01/21)
(关键字:打包,sign,签名,密钥,多渠道)
android 设计
Material Design
Toolbar
- Android开发:最详细的 Toolbar 开发实践总结(16/02/23)
(关键字:Toolbar,细节)
透明状态栏实战
- Android开发:Translucent System Bar 的最佳实践(16/02/23)
(关键字:StatusBar,状态栏,沉浸式状态栏)
android 优化
android 自定义View 优化
- Android中关于在onDraw或者onMeasure中创建对象提示Avoid object allocations during draw/layout operations (preallocate and reuse instead) 问题(16/01/22)
(关键字:onDraw,优化,对象创建) - Android性能优化系列——Understanding Overdraw(16/01/28)
(关键字:OverDraw优化,开发者工具,GPU) - Android性能优化系列——Profile GPU Rendering(16/01/28)
(关键字:GPU渲染,开发者工具,OpenGL,关键帧)
分析方法卡顿的神器TraceView
- 正确使用Android性能分析工具——TraceView(16/01/28)
(关键字:TraceView,卡顿分析,内存优化,方法分析)
追踪内存泄露的圣器 MAT–(MemoryAnalyzerTool)
- Shallow heap & Retained heap的介绍(16/01/28)
(关键字:MAT,内存泄露) - 使用Android studio分析内存泄露(16/01/28)
(关键字:MAT,内存泄露,内存优化,Handler)
android 内存泄露
引言
在MVP模式中,可以将Presenter中的mActivity设置成弱引用,这样如果在Presenter中要执行一些耗时操作而持有activity不能被回收导致内存泄露的情况发生.
那么,如果设置成弱引用不会出现随意被垃圾收集器处理的情况,而出现Presenter引用到activity对象的null情况吗?
答案: 在android 原生的某个地方已经将activity设置为强引用了,这也是activity的生命周期的实现原理,所以此时不需要担心这个问题,而需要注意当系统本应该清除activity时候能保证也能正常处理就行了.
- Android内存泄漏分析及调试(16/01/03)
(关键字:内存泄露,GC,Handler,MAT,引用类型) - Android中的软引用(SoftRefrerence)和弱引用(WeakReference)(16/01/03)
(关键字:引用类型,内存泄露,缓存机制) - Java 7之基础 - 强引用、弱引用、软引用、虚引用(16/01/03)
(关键字:引用类型,生命周期) - 为什么在 activity中 使用handler为甚要声明为静态的(16/01/03)
(关键字:Handler,内存泄露,静态类型)
Android 工具
Android 开发官方IDE:Android Studio
快捷键及使用技巧大全
- Android Studio 小技巧合集(16/02/25)
(关键字:技巧,AS)
其下的Gradle
- 美团Android自动化之旅—生成渠道包(16/04/10)
(关键字:自动化,渠道包,Maven,ApkTool) - 美团Android自动化之旅—适配渠道包(16/04/10)
(关键字:自动化,渠道包,Maven,各项渠道的不同)
生动生成工具
- Intellij IDEA 设置Java 文件File Header(16/04/18)
(关键字:File Header,类头注释)
代码规范检测工具Lint
内嵌在Android Studio 中的一个工具,可以自己定义出需要的代码约束及提示.
- Android Studio使用Lint进行代码检查(16/04/05)
- Android自定义Lint实践(底部有官方教程)(16/04/05)
静态代码检查工具Coverity
这个库适用于Java,十分强大,能检测出类似单例模式中DCL写法不易发现的问题
- Coverity 代码静态安全检测(16/04/05)
- 点击进入官网(16/04/05)
Android 代码搜索神器 – Codota
正如codota 官方所说,的确是精品,他的搜索源,不仅只有Github,而且还有知名博客和开发者网站,让你搜索一个东西,不用在找上半天;
工具收藏大全
IDEAVim
Stetho(FaceBook出品)
Android 新特性
Android 6.0 MashMallow
- Android 6.0 运行时权限处理完全解析(16/03/23)
Android 架构
MVP模式
- 浅谈 MVP in Android(16/03/27)
(关键字:MVP)
响应式编程: RxJava
- 给 Android 开发者的 RxJava 详解(16/04/17)
(关键字:RxJava,Retrofit,原理)
RESTful模式 以及 Retrofit
- 理解RESTful架构(16/04/17)
(关键字:RESTful) - 用 Retrofit 2 简化 HTTP 请求(16/04/17)
(关键字:Retrofit2,HTTP) - Retrofit2 更新指南(16/04/18)
(关键字:Retrofit2与Retrofit,不同之处,更新)