1、 2015-4-8 html
1. 依赖注入java
2. ImageView的属性android:scaleType的做用分析react
3. Android Service彻底解析,关于服务你所需知道的一切(上)linux
4. Android Service彻底解析,关于服务你所需知道的一切(下)android
2、2015-4-14ios
1. android--多个Ativity值传递FLAG_ACTIVITY_FORWARD_RESULTgit
2. Acitivity子类AliasActivity简介和使用github
3. activity-alias的使用web
4. Android中改变Activity的不一样icon:activity-alias
算法
5. 一个app,多个入口图标,activity-alias实现多程序入口并显示指定view完成
6. Custom filtering of intent chooser based on installed Android package name
3、2015-4-17
1. [Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法
4、2015-4-22
3. Android内存优化之三:打开MAT中的Bitmap原图
4. Google利器Android Studio从入门到精通
5. 从Fragment被销毁看replace和add的区别
5、2015-4-23
1. Mastering the Android Touch System (不错的演讲)
3. [Android][Android Studio] Gradle项目中添加JNI生成文件(.so文件)
4. Integrating .so files into your APK
sourceSets.main { jni.srcDirs = [] // This prevents the auto generation of Android.mk jniLibs.srcDir 'src/main/libs' // This is not necessary unless you have precompiled libraries(*.so file) in your project. }
5. Android异步消息处理机制彻底解析,带你从源码的角度完全理解
Handler.sendMessage()
Handler.post()
View.post()
Activity.runOnUiThread()
6、2015-4-28
1. 关于红杏的公益代理, Android Studio以及freso的编译
7、2015-4-29
2. Android Studio Tips -- 布局预览 (xmlns:tools)
3. Android Studio Tips -- 提取方法 (Alt+Shift+M)
8、2015-5-4
注意下,个人styleable的name写的是test,因此说这里并不要求必定是自定义View的名字。
declare-styleable的确是能够不写的。
3. Android Notes - Activity生命周期中的onSaveInstanceState
只要某个Activity是作入栈而且非栈顶时(启动跳转其余Activity或者点击Home按钮),此Activity是须要调用onSaveInstanceState的。
若是Activity是作出栈的动做(点击back或者执行finish),是不会调用onSaveInstanceState的。
5. Android Training - 避免程序无响应ANR
你应该经过Process.setThreadPriority()
并传递THREAD_PRIORITY_BACKGROUND
来设置线程的优先级为”background”:
android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
若是你不经过这个方式来给线程设置一个低的优先级,那么这个线程仍然会使得你的应用显得卡顿,由于这个线程默认与UI线程有着一样的优先级。
6. Android Training - 代码性能优化小技巧
使用加强的For循环
使用包级访问而不是内部类的私有访问
9、2015-5-6
c:建立归档文件
x:解压归档文件
v:显示命令执行的进度
f:指定归档文件的名字
t:列出归档文件的内容
z:用gzip过滤存档
j:用bzip2过滤存档
r:添加或更新归档文件中的文件或目录
2. Android xml资源文件中@、@android:、@*、?的含义和区别
引用自定义资源文件:android:text=”@string/hello”
引用系统资源文件:
android:drawable=”@android:drawable/dialog_frame” (public资源)
android:drawable="@*android:drawable/btn_list_attachment_delete_normal"(非public资源)
引用主题属性:android:textColor=”?android:textDisabledColor”
10、2015-5-7
1. Android加载不一样DPI资源与内存消耗之间的关系
内存消耗与图片文件大小无关。
hdpi 的手机加载低 dpi 资源,例如 ldpi,加载到内存前会先按比例拉伸。内存占用确增大为原来的 4 倍!
若是图片资源在 app 中放错 dpi 文件夹,使用体验会大打折扣,或者尽可能使用 9patch 图片。
// DENSITY_DEVICE 是设备的 DPI 大小, ResourceDensity 是设备加载的 DPI 文件夹对应的 DPI 大小
Memory Consumption Size = Width * Height * (DENSITY_DEVICE / ResourceDensity)^2 * (Bit depth / 8)
2. Android Service与Activity之间通讯的几种方式
经过Binder对象
经过broadcast(广播)的形式
11、2015-5-9
* LayoutInflater inflater = mActivity.getLayoutInflater(); //调用Activity的getLayoutInflater()
* LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
* LayoutInflater inflater = LayoutInflater.from(context);
* 这三种方式最终本质是都是调用的Context.getSystemService()。
3. Java习惯用法总结
* 不要像这样使用重复的字符串链接:s += item ,由于它的时间效率是O(n^2)。
* 优先使用StringBuilder,由于它更快。
* StringBuffer的全部方法都是同步的,而你一般不须要同步的方法。
12、2015-5-13
1. Difference between getContext() , getApplicationContext() , getBaseContext()
View.getContext(): Returns the context the view is currently running in. Usually the currently active Activity.
2. Execution failed for task ':imagepipeline:ndk_build_gifimage'.
若是你遇到这个错误,多半是找不到ndk环境致使的
十3、2015-5-15
1. HTTP 304状态分析
对于动态页面,就是动态产生的页面,每每没有包含 Last Modified 信息,这样浏览器、网关等都不会作缓存,也就是在每次请求的时候都完成一个 200 的请求。
对于动态页面作缓存加速,首先要在 Response 的 HTTP Header 中增长 Last Modified 定义,其次根据 Request 中的 If Modified Since 和被请求内容的更新时间来返回 200 或者 304 。
十4、2015-5-18
OnCreate <-> OnAttach - OnCreate - OnCreateView - OnActivityCreated
OnStart <-> OnStart
...
OnDestroy <-> OnDestroyView - OnDestroy - OnDetach
Object[] array = list.toArray();
list = Arrays.asList(array);
set = new HashSet(list);
array = set.toArray();
十5、2015-5-20
Fiddler如何监测VirtualBox中windows系统的网络请求:以VirtualBox为例
十6、2015-5-25
1. Fiddler 教程
十7、2015-5-27
数字2:在这些类中去layout inflate是合法的,可是会使用系统默认的主题样式,若是你自定义了某些样式可能不会被使用(LayoutInflater.from(mContext.getApplicationContext))。
十8、2015-5-28
2. How to use MVVM pattern in Android (Droidcon Krakow 2014) (PPT演示)
3. Android MVVM框架RoboBinding初探
4. Linux grep命令过滤关键字
若是你是想只显示配置文件中的以 # 号开头的行,那就使用
# grep ^# filename
若是是想显示除 # 号开头的行的话呢,只需加个参数-v (-v 表示相反的过滤)就好了
# grep -v ^# filename
5. armeabi armeabi-v7a mips x86 理解
虽然armeabi通用性强,但速度慢,而v7a能充分发挥v7a CPU的能力。armeabi就是针对普通的或旧的armcpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。x8六、mips同理。
十9、2015-5-29
1. android图片压缩质量参数Bitmap.Config RGB_565等的含义
2.Exception OutofMemoryError dalvik.system.VMRuntime.newNonMovableArray(Native Method)
Try enabling large heap support, by adding this to your AndroidManifest.xml file:
<application android:largeHeap="true"
Also, you can reduce the memory required for your Bitmaps by using the Bitmap.Config type RGB_565 instead of ARGB_8888.
二10、2015-5-30
1. Activity启动模式图文详解:standard, singleTop, singleTask 以及 singleInstance
2. 细说Java单例模式
在执行类的初始化期间,JVM会去获取一个锁。
反射的某些地方绕过了java机制的限制,private只在编译时进行权限的限制,可是在运行时是不存在这种权限的限制的 。
使用enum实现的单例自带防序列化与防反射(抽象类)功能。
3. Java 理论与实践: 正确使用 Volatile 变量
Java 语言中的 volatile 变量能够被看做是一种 “程度较轻的 synchronized
”;与 synchronized
块相比,volatile 变量所需的编码较少,而且运行时开销也较少,可是它所能实现的功能也仅是 synchronized
的一部分。
4. 双重检查锁定与延迟初始化 (单例模式)
双重检查锁定看起来彷佛很完美,但这是一个错误的优化!在线程执行到第4行代码读取到instance不为null时,instance引用的对象有可能尚未完成初始化(发生重排序)。
[在JDK1.5以后(1.5以前没有volatile关键字),可使用volatile变量禁止指令重排序,让DCL生效]
基于volatile的双重检查锁定的解决方案(double-check idiom):
private volatile static Instance instance;
基于类初始化的解决方案(lazy initiallization holder class idiom):
public static Instance getInstance() { return InstanceHolder.instance ; //这里将致使InstanceHolder类被初始化 }
对于实例域,使用双重检查模式(double-check idiom):性能考虑,避免域初始化后访问这个域的锁定开销
对于静态域,使用(lazy initiallization holder class idiom):现代的VM将在初始化类的时候,同步域的访问
二11、2015-6-1
1. failed to find Build Tools revision 21.1.1 - sdk up to date
Get Build Tools revision 21.1.2
sudo android update sdk --no-ui --all --filter build-tools-21.1.2
Help:
sudo android update sdk --help
Get list of available Android SDK updates:
sudo android list sdk --extended --all
2. Android View.OnTouchListener 的子类
二12、2015-6-2
1. Git 经常使用命令
2. 公共技术点之面向对象六大原则(以Volley为例)
单一职责原则:单一职责原则并非说一个类只有一个函数,而是说这个类中的函数所作的工做必需要是高度相关的,也就是高内聚。
里氏替换原则:里氏替换原则就是依赖于继承、多态这两大特性。里氏替换原则简单来讲就是全部引用基类的地方必须能透明地使用其子类的对象。
依赖倒置原则:模块间的依赖经过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是经过接口或抽象类产生的。
开闭原则:对扩展开放,对修改关闭。
接口隔离原则:当一个接口太大时,咱们须要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法便可。
迪米特原则:一个对象应该对其余对象有最少的了解。
3. java.lang.IllegalArgumentException: pointerIndex out of range(multiple-touch)
// create an action int action = (event.getActionMasked() & MotionEvent.ACTION_MASK); // getting pointerindex int pointerIndex = ((event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT); //catch invalide if(pointerIndex == MotionEvent.INVALID_POINTER_ID){ return; }
使用event.getX(pointerIndex)而不是event.getX(),以防止多点触控报异常。
Beside, see http://stackoverflow.com/questions/6919292/pointerindex-out-of-range-android-multitouch
calling findPointerIndex(ev, activePointer)
returns -1
if it fails to find. Preventing dispatching touch event with invalid pointer less than 0 and pointer index greater or equal than pointer count for that event will probably prevent validation of pointer inside native MotionEvent implementation from throwing IAE.
int pointerCount = MotionEventCompat.getPointerCount(ev); int index = MotionEventCompat.getActionIndex(ev); int activePointerId = MotionEventCompat.getPointerId(ev, index); int pointerIndex = MotionEventCompat.findPointerIndex(ev,activePointerId);
二十3、2015-6-4
Ctrl+1 到 Ctrl+8 切换到指定位置编号的标签页。
Ctrl+Tab 或 Ctrl+PgDown 切换到下一个标签页
Ctrl+W 或 Ctrl+F4 关闭当前标签页或弹出式窗口
Ctrl+J 查看”下载”页
二十4、2015-6-8
xml: android:button="@null"
java: checkBox.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));
2. GridView的OnItemClickListener不响应问题
gridview中有节点是xxxbutton,点击事件会被xxxbutton拦截了,因此OnItemClickListener不会被callback。
checkbox控件也会拦截点击事件。
二十5、2015-6-9
Ctrl+Shift+/:模块注释,反注释再按一次便可,注意这边的”/“不能用小键盘的
Ctrl+Shift+小键盘/:折叠代码
Ctrl+[或]能够跳到大括号的开头结尾
Shift+Click能够关闭文件
二十6、2015-6-11
Android 和 Java 内存泄露检测。
二十7、2015-6-13
在Android中,规定以160dpi为基准,1dip=1px,若是密度是320dpi,则1dip=2px,以此类推。
android:layout_weight的真实含义是:若是View设置了该属性而且有效,那么该 View的宽度等于原有宽度(android:layout_width)加上剩余空间的占比。
假如咱们的宽度不是0dp(wrap_content和0dp的效果相同),而是match_parent,占比和上面正好相反。
二十8、2015-6-25
1. Linux的五个查找命令
2. Git远程操做详解
3. 推荐几个很是有用的工具
4. java反射机制
5. Java Enum
6. Fragment onOptionsItemSelected not being called
However the activity gets a chance to handle the event first, so the system calls onOptionsItemSelected() on the activity before calling the same callback for the fragment.
7. Android Studio : Failure [INSTALL_FAILED_OLDER_SDK]
I now I solved my problem by changing the AVD (I'm using Genymotion) to API 19.
手机SDK(系统)版本比build.gradle中设置的minSdkVersion低.
8. ANDROID – 基於 ACTIONBARCOMPAT(APPCOMPAT) 的 ACTION BAR STYLE 設定
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.my_color));
int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
TextView titleView = (TextView)findViewById(titleId);
titleView.setTextColor(getResources().getColor(android.R.color.black));
這邊须要透過 Resources.getSystem().getIdentifier("action_bar_title", "id", "android") 來取得 ActionBar Title 的 ID,然後再設定其 TextView 來設定文字顏色,範例中的顏色就直接以系統色碼 – 黑色來取代之,完成結果以下。
9. Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
Usually it's due to having a signed release version on my phone, then trying to deploy the debug version on top.
二十9、2015-6-26
1. ! [remote rejected] master -> refs/for/master (no changes made)
I was trying to push a new change, on top of a change which was still up for review, who's parent also was up for review.
$ git reset --hard HEAD^
$ git cherry-pick (commitId)
$ git push origin master:refs/for/master
三10、2015-7-8
1. Is there a unique Android device ID?
SN序列号:android.os.Build.SERIAL
IMEI:((TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
2. setCompoundDrawables与setCompoundDrawablesWithIntrinsicBounds的区别
setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)
Sets the Drawables (if any) to appear to the left of, above, to the right of, and below the text. Use null if you do not want a Drawable there. The Drawables' bounds will be set to their intrinsic bounds.
setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)
Sets the Drawables (if any) to appear to the left of, above, to the right of, and below the text. Use null if you do not want a Drawable there. The Drawables must already have had setBounds(Rect)
called.
三11、2015-7-15
三12、2015-7-17
三十3、2015-7-21
1. Synchronized和Static Synchronized区别
由于是static synchronized,因此不一样实例之间仍然会被限制
A: synchronized static是某个类的范围,synchronized static cSync{}防止多个线程同时访问这个 类中的synchronized static 方法。它能够对类的全部对象实例起做用。
B: synchronized 是某实例的范围,synchronized isSync(){}防止多个线程同时访问这个实例中的synchronized 方法。
2. Java - synchronizing static methods
"Avoid lock on static methods: worst solution is to put the "synchronized" keywords on the static methods, which means it will lock on all instances of this class."
三十4、2015-7-23
save和restore要配对使用(restore能够比save少,但不能多),若是restore调用次数比save多,会引起Error。
2. AnimatorSet: Circular dependencies cannot exist
Don't reuse the AnimatorSet, create a new one and it will be ok. The builder is accumulating the values and therefore creating a loop (the animation depending on itself in the "before")
3. Android属性动画彻底解析(上),初识属性动画的基本用法
4. Android属性动画彻底解析(中),ValueAnimator和ObjectAnimator的高级用法
5. Android属性动画彻底解析(下),Interpolator和ViewPropertyAnimator的用法
6. Android 属性动画(Property Animation) 彻底解析 (上)
7. Android 属性动画(Property Animation) 彻底解析 (下)
9. 贝塞尔曲线扫盲
三十5、2015-7-25
1. Android利用canvas画各类图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
最高位就是Alpha通道的值,对齐进行改变后再新建一个Bitmap
设置canvas的Paint的透明度,而后经过canvas.drawBitmap()来改变View的透明度
三十6、2015-7-27
1. Android布局优化之ViewStub、include、merge使用与源码分析
在include时设置了id,会复写原布局根元素的id
在中ViewStub设置了inflatedId,会复写原布局根元素的id
2. 详解Eclipse断点
4. Android Studio IDE: Break on Exception
三十7、2015-7-29
1. android:descendantFocusability属性在ListView中的妙用
一般会遇到listview的每一项没法响应点击的问题,由于消息还没传回每一项的viewgroup就被其子view消费了
只须要在每一项Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就行了
三十8、2015-7-31
1. ViewPager -- Fragment 切换卡顿 性能优化
Fragment轻量化,精简Fragment的布局
防止Fragment被销毁
Fragment内容延迟加载
三十9、2015-8-1
1. Android 图片Bitmap的剪切
3. Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix
4. Android图片旋转,缩放,位移,倾斜,对称完整示例(二)——Bitmap.createBitmap()和Matrix
5. Android Immutable bitmap crash error
四10、2015-8-5
自定义系统菜单项
2. android动态显示和隐藏status bar(通知栏)
四11、2015-8-6
1. Android Studio利用Gradle删除没有使用到的资源和代码文件
android { buildTypes { release { minifyEnabled true shrinkResources true } } }
ViewTreeObserver.OnGlobalLayoutListener, // 用于监听布局之类的变化,好比某个控件消失了
四12、2015-8-7
1. 微信分享:代码混淆以后,会致使没法弹出发送第三方消息的确认框
可以调起微信到选择好友列表,可是点击发送后无响应,请检查proguard配置是否对微信SDK代码进行了混淆,建议不要对SDK对混淆,参考如下proguard配置:
-keep class com.tencent.mm.sdk.** {
*;
}
四十3、2015-8-8
1. Android Studio's debugger not stopping at breakpoints within library modules
As stated in the comments of this issue, setting minifyEnabled false
in the debug build is the best practice. By setting this variable in the app module you are disabling the entire proguard build process. It is useful when optimizing the release build, but gives some problems if you are testing and developing.
四十4、2015-8-10
1. Android TextView中文字经过SpannableString来设置超连接、颜色、字体等属性
四十4、2015-8-11
1. Java静态内部类、匿名内部类、成员式内部类和局部内部类
内部类能够是静态(static)的,可使用 public、protected 和 private 访问控制符,而外部类只能使用 public,或者默认。
非静态内部类中不能声明任何 static 成员(变量)。[注意这里说的是变量,常量(也就是final static修饰的属性)仍是能够的]
局部类不能够是 static 的,里边也不能定义 static 成员;
局部类不能够用 public、private、protected 修饰,只能使用缺省的;
2. 使用静态内部类提升封装性
静态内部类有两个优势:增强了类的封装性和提升了代码的可读性
提升封装性:静态内部类是外部类的子行为或子属性,二者直接保持着必定的关系
内部类持有一个外部类的引用,能够自由访问。
`静态内部类不持有外部类的引用
`静态内部类不依赖外部类
`普通内部类不能声明static的方法和变量
Happen-Before规则
该消息引用了Activity的Handler对象,而后这个Handler又引用了这个Activity。这些引用对象会保持到该消息被处理完,这样就致使该Activity对象没法被回收,从而致使了上面说的 Activity泄露。
Java中内部类(匿名内部类也同样)会有宿主类的强引用。
6. java内存泄露缘由总结
当集合里面的对象属性被修改后,再调用remove()方法时不起做用。
静态集合类引发内存泄露。
单例模式:单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式)。
使用静态内部类和弱引用。
若是一个对象具备弱引用,那么当GC线程扫描的过程当中,一旦发现了只具备弱引用的对象,无论当前内存空间足够与否,都会回收它的内存。
但因为垃圾回收器是一个优先级很低的线程,所以不必定会很快发现那些只具备弱引用的对象。
9. Android 消息处理机制之二: Message 中 obtain()源代码剖析
获取Message对象的时候是不能用 "new Message" 的方式来获取,而必须使用Message.Obtain()的方式来获取Message对象
四十5、2015-8-17
2. Make Your Background Moving Like on the Play Music App (Playing with ImageView.setImageMatrix)
don’t forget to set the MATRIX
scaleType:
ImageView.setScaleType(ScaleType.MATRIX) / android:scaleType="matrix"
adb logcat ActivityManager:I MyApp:D *:S (输出标记为“ActivityManager”而且优先级大于等于“Info”和标记为“MyApp”而且优先级大于等于“Debug”的日志)
adb logcat -v time (显示时间)
四十6、2015-8-18
1. Centering Textview Below a image button that is under relative layout?(文本与图片居中对齐)
just align its start and end together, the result is the TextView aligned to the center:
android:layout_alignStart="@id/my_image_view"
android:layout_alignEnd="@id/my_image_view"
note: the width of the text will be limited to the width of the icon
四十7、2015-8-19
1. Android编程获取网络链接状态(3G/Wifi)及调用网络配置界面
Context.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网络设置界面
四十8、2015-8-22
1. How to increase Android Studio memory limit in Mac
Xmx
specifies the maximum memory allocation pool for a Java Virtual Machine (JVM), while Xms
specifies the initial memory allocation pool.
四十9、2015-8-25
1. android listView 到上下边界 蓝色或黄色阴影去除方法
在2.3以前能够在listview的属性中经过设置android:fadingEdge="none"来解决问题,可是在2.3及以上这个是不行的。
这里,能够经过代码来设置模式,禁止其阴影的出现:
if(Integer.parseInt(Build.VERSION.SDK) >= 9){
this.setOverScrollMode(View.OVER_SCROLL_NEVER);
}
五10、2015-8-26
1. Android AlertDialog去掉系统黑色背景
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
五11、2015-8-28
1. Android中若是你也使用commons-codec-1.6而且出现了问题
Google Android内部也有一个包名同样的工程,并且类名也相同,关键一点是没有该方法!因而致使包名冲突。
2. url parameters and map the transformation between
Collections.sort(arl,new Realize_Comparator());
五12、2015-8-30
1. Android动画学习笔记-Android Animation
adb shell setprop log.tag.SQLiteLog V
软键盘的弹出隐藏用OnGlobalLayoutListener监听实现
5. Android App Launching Made Gorgeous(Starting Window)
Simply add the android:windowBackground into default application/activity's theme solve the problem.
五十3、2015-9-15
1. android:scrollbarStyle属性及滚动条和分割线覆盖问题
insideOverlay:默认值,表示在padding区域内而且覆盖在view上
insideInset:表示在padding区域内而且插入在view后面
outsideOverlay:表示在padding区域外而且覆盖在view上,推荐这个
outsideInset:表示在padding区域外而且插入在view后面
列限制:80或100
不要使用组合声明,好比int a, b;
须要时才声明,并尽快进行初始化
中括号是类型的一部分:String[] args
, 而非String args[]
。
在一个switch块内,经过一条注释来讲明程序将继续执行到下一个语句组(// fall through)
每一个switch语句都包含一个default
语句组,即便它什么代码也不包含。
类和成员的modifiers若是存在,则按Java语言规范中推荐的顺序出现:(public abstract static final synchronized)
public protected private abstract static final transient volatile synchronized native strictfp
包名所有小写,连续的单词只是简单地链接起来,不使用下划线。
每一个常量都是一个静态final字段,但不是全部静态final字段都是常量。
Tip:不要使用finalize。若是你非要使用它,请先仔细阅读和理解Effective Java 第7条款:“Avoid Finalizers”,而后不要使用它。
五十4、2015-9-16
1. MAT - Memory Analyzer Tool 使用进阶
五十5、2015-9-24
Note: 当系统开始清除LRU缓存中的进程时,尽管它首先按照LRU的顺序来操做,可是它一样会考虑进程的内存使用量。所以消耗越少的进程则越容易被留下来。
五十6、2015-10-10
1. 使用setDrawingCacheEnabled(boolean flag)提升绘图速度
void setDrawingCacheEnabled(boolean flag),
Bitmap getDrawingCache(boolean autoScale),
void buildDrawingCache(boolean autoScale),
void destroyDrawingCache()
五十7、2015-10-21
float a = 123.2334f;
float b = (float) (Math.round(a * 100)) / 100; // (这里的100就是2位小数点,若是要其它位,如4位,这里两个100改为10000)
Math.round()方法表示“四舍五入” ,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整
3. How to generate an MD5 checksum for a file in Android?
五十8、2015-10-24
git rebase -i HEAD~3
Android 3.0开始对AsyncTask的API作出了一些调整:#execute()提交的任务,按前后顺序每次只运行一个
若是你真想并行执行任务,你可使用另一个版本:使用THREAD_POOL_EXECUTOR参数的executeOnExecutor方法
AsyncTask.executeOnExecutor(Executors.newSingleThreadExecutor());
AsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)你也能够采用这个系统提供的线程池来处理你的任务
系统默认的线程池能够须要等待,它默认是按顺序执行(THREAD_POOL_EXECUTOR)或者最多执行5个(SerialExecutor)
使用自定义的线程池,这样就能够即便的执行你的任务需求:new AsyncTask.executeOnExecutor((ExecutorService)Executors.newCachedThreadPool())
5. Android的线程池:ExecutorService和Executors简单介绍
6. Pressed状态和clickable, duplicateParentState的关系
当设置setDuplicateParentStateEnabled为true时,View的DrawableState直接使用了其parent的。因此,他的drawable状态会一直保持与其parent同步。
五十9、2015-10-26
1. Java中的ReentrantLock和synchronized两种锁定机制的对比
咱们何时才应该使用 ReentrantLock
呢?答案很是简单 —— 在确实须要一些 synchronized 所没有的特性的时候,好比时间锁等候、可中断锁等候、无块结构锁、多个条件变量或者锁投票。
六10、2015-10-27
一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库
2. Android之取消ViewPager+Fragment的预加载(懒加载)
setUserVisibleHint每次fragment(左右切换)显示与隐藏都会调用,他的调用顺序优于onCreate,须要进行一些状态的判断。
六11、2015-10-28
1. 当有多个设备online时,命令行窗口经过adb链接指定设备方法
$ adb devices
$ adb -s <serial number> cmd
$ adb -s SH0A6PL00243 logcat
六12、2015-11-13
1. RecyclerView android:layout_width="match_parent"无效
View view = mInflater.from(mContext).inflate(R.layout.item_fra_main2, parent,
false
);
//View view = View.inflate(parent.getContext(), R.layout.item_fra_main2, null);// match_parent无效
六十3、2015-11-16
若是一个保留字符在特定上下文中具备特殊含义(称做"reserved purpose") , 且URI中必须使用该字符用于其它目的, 那么该字符必须百分号编码. 百分号编码一个保留字符。
例如,"/
", 若是用做URI的路径成分的分界符, 则是具备特殊含义的保留字符. 若是该字符须要出如今URI一个路径成分的内部, 则三字符序列"%2F
"或"%2f
"就用于代替本来的"/
"出如今该URI路径成分的内部.
2005年1月发布的RFC 3986,强制全部新的URI必须对未保留字符不加以百分号编码;
其它字符要先转换为UTF-8字节序列, 而后对其字节值使用百分号编码。
2. Android RecyclerView 使用彻底解析 体验艺术般的控件
六十4、2015-11-26
1. Android中Activity四种启动模式和taskAffinity属性详解
任务(Task)不只能够跨应用(Application),还能够跨进程(Process)[由android:taskAffinity决定所在任务栈(Task)]
在启动一个singleTask的Activity实例时,若是系统中已经存在这样一个实例,就会将这个实例调度到任务栈的栈顶,并清除它当前所在任务中位于它上面的全部的activity。
singleInstance老是在新的任务中开启,而且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其余activity会自动运行于另外一个任务栈中。
Add throttling behaviour: debounce() is what you usually need.
Kill the previous requests: introduce switchMap instead of flatMap.
No error functionality / no network functionality: You need a retry mechanism for these.
RxTextView.textChanges(searchEditText) .debounce(150, MILLISECONDS) // throttling behaviour .switchMap(Api::searchItems) // Kill the previous requests .retryWhen(new RetryWithConnectivityIncremental(context, 5, 15, SECONDS)) // a retry mechanism .subscribe(this::updateList, t->showErrorToUser());
3. Observe on the correct thread
Instead of doing this: Observable.just(1,2,3).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).flatMap(/** logic which doesn't touch ui **//).subscribe();
do this: Observable.just(1,2,3).subscribeOn(Schedulers.newThread()).flatMap(/** logic which doesn't touch ui **//).observeOn(AndroidSchedulers.mainThread()).subscribe();
Earlier .subscribeOn() wins.
六十5、2015-11-27
AsyncSubject:仅释放Observable释放的最后一个数据,而且仅在Observable完成以后(subject.onComplete())。
observer will receive no onNext events if the subject.onCompleted() isn't called.
当Observer订阅了一个BehaviorSubject,它一开始就会释放Observable最近释放的一个数据对象,当尚未任何数据释放时,它则是一个默认值。
PublishSubject:仅会向Observer释放在订阅以后Observable释放的数据。
无论Observer什么时候订阅ReplaySubject,ReplaySubject会向全部Observer释放Observable释放过的数据。
假设你有一个Subject,你想把它传递给其它的代理或者暴露它的Subscriber接口,你能够调用它的asObservable方法,这个方法返回一个Observable。具体使用方法能够参考Javadoc文档。
若是你把 Subject
看成一个 Subscriber
使用,注意不要从多个线程中调用它的onNext方法(包括其它的on系列方法),这可能致使同时(非顺序)调用,这会违反Observable协议,给Subject的结果增长了不肯定性。
要避免此类问题,你能够将 Subject
转换为一个 SerializedSubject
,相似于这样:
mySafeSubject = new SerializedSubject( myUnsafeSubject );
六十6、2015-12-10
事件总线机制:A不须要调用B类的方法,而仅仅须要产生并发出 一个“事件通知”, 若是B订阅了该“事件” 那么它将会接受到这个事件,作出相应的操做。这样就被解耦了。
六十7、2015-12-12
某些布局属性要加在ViewStub而不是实际的布局上面,才会起做用,好比上面用的android:layout_margin*系列属性,若是加在TextView上面,则不会起做用,须要放在它的ViewStub上面才会起做用。而ViewStub的属性在inflate()后会都传给相应的布局。
六十8、2015-12-12
1. Android多个Activity切换时其生命周期中的方法执行顺序
A.onPause() -> B.onCreate()/onRestart() -> B.onStart() -> B.onResume -> A.onStop()
六十9、2015-12-13
MVC:View里会包含Model信息,不可避免的还要包括一些业务逻辑。更改View也是比较困难的,至少那些业务逻辑是没法重用的。
MVP:经过定义好的接口进行交互,从而使得在变动View时候能够保持Presenter的不变(重用)。咱们能够将一个Presenter用于多个视图,而不须要改变Presenter的逻辑。
还能够编写测试用的View,模拟用户的各类操做,从而实现对Presenter的测试而不须要使用自动化的测试工具。能够脱离用户接口来测试这些逻辑(单元)。
Activity能够把全部逻辑给Presenter处理,这样Java逻辑就从手机的Activity中分离出来!
View只应该有简单的Set/Get的方法,用户输入和设置界面显示的内容,除此就不该该有更多的内容,毫不允许直接访问Model。
“Model”,指的是检索或控制一个model的业务逻辑层。
理论上来讲presenter和业务逻辑层都是纯旧式的可以与桌面应用或其余任何java应用共享的java代码。(不被绑定到Android平台上)。
定义一个专门的接口能够提升代码可读性,而且未来能够灵活地定义更多其余的与View相关的方法。
Fragment提交事务异步的,并且是附加在主线程Handler队列尾部的。
七10、2015-12-17
1. Android应用启动优化:一种DelayLoad的实现和原理
Activity 的 onCreate/onStart/onResume三个回调中,并无执行Measure和Layout操做, 这个是在后面的performTraversals中才执行的.
getWindow().getDecorView().post(new Runnable()); // 第二个 performTraversals 方法执行完成后立刻就执行Runnable了
2. 给 App 提速:Android 性能优化总结(-)
七11、2015-12-20
1. 有什么好用的Android Studio的插件值得推荐?(-)
2. 凯子哥带你学framework-Activity界面显示全解析(-)
七12、2015-12-25
1. ubuntu安装 JDK 及 android studio,adb 命令配置
2. Android Performance Case Study(-)
4. Android应用架构(!)
七十3、2015-12-28
1. Android Recyclerview GridLayoutManager column spacing
七十4、2015-12-29
1. ScrollView里面嵌套ListView,RecyclerView
直接嵌套会有老是问题,须要重写onMeasure()方法。
七十5、2015-12-30
1. Retrofit — Using the Log Level to Debug Requests(Retrofit 1)
RestAdapter.Builder builder = new RestAdapter.Builder() .setEndpoint(API_LOCATION) .setLogLevel(RestAdapter.LogLevel.FULL) // this is the important line .setClient(new OkClient(new OkHttpClient()));
2. RxJava变换操做符:.concatMap( )与.flatMap( )的比较
flatMap()使用merge()操做符,而concatMap()使用concat()。
flatMap()可能交错的发送事件,最终结果的顺序可能并是不原始Observable发送时的顺序。
concatMap()遵循元素的顺序。
3. Capturing executor for current thread
七十6、2016-1-6
1. Android开发中的MVP架构(!)
七十7、2016-1-8
1. Android 属性 allowBackup 安全风险浅析
Android API Level 8 及其以上 Android 系统提供了为应用程序数据的备份和恢复功能。
此功能的开关决定于该应用程序中AndroidManifest.xml
文件中的 allowBackup 属性值,其属性值默认是 True。
为了安全起见,开发者务必将 android:allowBackup 标志值设置为 false 来关闭应用程序的备份和恢复功能,以避免形成信息泄露和财产损失。