Android DexClassLoader使用

类加载器 是一个java的概念:作用就是动态的装载Class文件。java中有ClassLoader类,借助这个类可以装载想要的Class文件,每个ClassLoader对象在初始化时必须制定Class文件的路径。
Android的机制稍微有点不一样,Android会将.class文件编译优化成.dex文件,因此使用java的ClassLoader就不行了,由于.dex文件的产生,想要加载.dex就需要一个可以加载.dex文件的ClassLoader,这个类在android里边就是DexClassLoader。

阅读全文

Java类加载器

原文出处:Java类加载器总结
相关资源:http://www.blogjava.net/zhuxing/archive/2008/08/08/220841.html
1.类的加载过程
JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:

阅读全文

ConcurrentModificationException异常以及产生的原因

java.util.ConcurrentModificationException 这个异常是JAVA开发者刚刚接触java时经常产生的。但是什么情况下会产生这种异常呢?为什么会产生这种异常呢,如何避免呢?

###产生原因
先来看看一下集中情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    public static void testArrary(){
ArrayList<Integer> aList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
aList.add(i*i);
}
for (Integer a : aList) {
if(a == 4){
aList.add(100);//包异常
}
}
Iterator<Integer> iterator = aList.iterator();
while (iterator.hasNext()){
Integer next = iterator.next();
if(next == 4){
// aList.remove(next);//报异常
iterator.remove();//不报异常
}
}
for (int i = 0; i < aList.size(); i++) {
Integer integer = aList.get(i);
if(integer == 4){
aList.remove(integer);//不报异常
}
}
System.out.println(aList.size());
}

阅读全文

Android的Window和Window Manger

WindowManger是外界访问Window的入口,Window的具体实现再WindowmanagerService中,Window Manger和WindowManagerService的交互是一个IPC过程。

Window Manager的功能

WindowManger提供的功能其实很简单:开发者用到的基本就三个功能,即添加View,更新View和删除View。
Window Manger实现了ViewManager的接口,addView(), updateViewLayout()和removeView()这三个方法都是定义的ViewManager中的。

阅读全文

Android AsyncTask的骗术

Why

首先,说一下标题为什么说是骗术? Google提供的AsyncTask,我一直认为是一个使用线程池来处理任务的并发的高性能类,淡然这句话猛一看没有什么问题。但是问题出现的我的使用上,如果你使用它时默认也是调用的execute(Params… params)这个方法,那我感觉我应该善意的提醒你“哥们你被骗了”,其实这个方法内部的执行不是并发处理的,而是串行处理的。下面我们来看一下源码。

阅读全文

Android动画插值器(Interpolator)

强大的Interpolator动画插值器

Interpolator 被用来修饰动画效果,定义动画的变化率。
安卓系统默认实现了以下几种插值器:

阅读全文

RxJava & RxAndroid初体验

参考大神抛物线的文章 给Android开发这的RxJava详解

1. 实现原理

扩展的观察者模式。观察者模式的原理不在多说,不懂的(有个网站名字叫百度/Google)。
使用RxJava要弄清楚几个单词的具体含义:
Observable:被观察者、事件源
Observer:订阅者、观察者(RxJava中可以理解为和Subscriber相同)
Subscriber:订阅者,观察者(同Observer)
subscribe 订阅
Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。
与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。

阅读全文

小米手机使用WebView返回键调用goBack()后onReceiveTitle()方法不被调用

解决办法:
后onReceiveTitle()方法不被调用/ABB3BBC2-922F-4AC5-8B0A-E8E4AE9EA5EB.png)

阅读全文

ViewDragHelper的使用

ViewDragHelper使用的一般步骤:

  1. 初始化DragHelper
    mDragHelper = ViewDragHelper.create(this, new MyDragCallBack());
  2. 拦截事件,并处理事件

阅读全文

scrollTo()、scrollBy()和Scroller

1.scrollTo()与scrollBy()使用

scrollTo()和scrollBy()是View的两个方法,可以进行View的移动。但是需要注意的是这两个方法移动的是View的内容,通俗的讲就是当View为ViewGroup时,移动的是此ViewGroup的子View;当View为单独的View时,移动的是内部内容。例如:View为TextView时,移动的是内容文字。

阅读全文