线程和线程池 handlerThread

进程:资源分配的最小单位。
线程:最小调度单位。
一个线程只能有一个进程,一个进程可以由无数的线程。
创建线程的3种方式:
1.直接继承Thread类。
2.实现Runnable接口。

Read More

JAVA反射

类是Java.lang.Class类的实例对象
编译时刻加载类,静态加载类,运行时刻加载类是动态加载类。
Class,forName(“类的全称”)
不仅表示了类的类类型,还代表了动态加载类。

Read More

Java 7之基础 - 强引用、弱引用、软引用、虚引用(转载)

1、强引用(StrongReference)

强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:
1
Object o=new Object(); // 强引用

当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用,如下:

1
o=null; // 帮助垃圾收集器回收此对象

显式地设置o为null,或超出对象的生命周期范围,则gc认为该对象不存在引用,这时就可以回收这个对象。具体什么时候收集这要取决于gc的算法。

Read More

ANR

什么是ANR

ANR全称Application Not Responding,意思就是程序未响应。如果一个应用无法响应用户的输入,系统就会弹出一个ANR对话框,如下图所示,用户可以自行选择继续等待亦或者是停止当前程序。

Read More

自己的内部链式存储机制

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package javastaty;
public class LinedStack<T> {
private static class Node<U> {
U item; //链式存储的数据对象
Node<U> next;//实体类对象 保存了自己和上面的item
Node() {//初始化
item = null;
next = null;
}
Node(U item, Node<U> next) {//存储
this.item = item;
this.next = next;
}
boolean end() {//末端哨兵机制
return item == null && next ==null;
}
}
/*************************************************************************************************/
private Node<T> top = new Node<T>();
public void push(T item){
top = new Node<T>(item,top);
}
public T pop(){
T result = top.item;
if(!top.end())
top = top.next;
return result;
}
public static void main(String[] args){
LinedStack<String> lss = new LinedStack<String>();
for(String s : "wo xiang zhi dao zhege shi zen me hui shi".split(" "))
lss.push(s);
String s ;
while((s = lss.pop()) != null)
System.out.println(s);
}
}

Read More

This ,Static,对象,对象的引用 等关键字的理解

##this 关键字:
this关键字非常有意思,每一个Java类中都会有this关键字。
this关键字的意思也很简单,就是当前类的对象的引用。表示调用方法的那个对象的引用。

Read More

Activity生命周期

Activity是Android最重要的组件,因为它是与用户交互的。所以我们要弄明白Activity的生命周期。
Activity的生命周期有两种情况,第一种是正常情况下的创建,销毁。第二种是Activity被内存回收的情况。

Read More

Builder模式

Builder模式就是不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器,得到一个builder对象。然后再builder对象上调用类似setter的方法,来设置每个相关的可选参数。
最后,客户端调用无参数的build方法来生成不可变的对象。

Read More

Android的线程和线程池——AsyncTask

线程在Android中是一个很重要的概念,从用途上来说线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程往往用于执行耗时操作。在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地生产,并且线程的创建和销毁都会有相应的开销。
AsyncTask 是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程中更新UI。但是AsyncTask并不适合进行特别好使的后台任务,对于特别好使的任务开说,建议使用线程池。

Read More

Android消息机制——总结

Android消息处理机制主要就是消息的传递机制,通过创建消息队列,把消息放入消息队列中,通过Looper获取消息,并通过handler处理消息的过程。
整个过程最重要的就是Looper的工作机制,Looper内部通过调用MessageQueue的next方法来获取消息,得到消息后便通过Handler的dispatchMessage方法
处理消息,dispatchMessage方法内部判断消息是否为空,如果消息不为空,回调方法handleMessage不为空,就会把消息传递到回调方法中,然后用户再来处理这个消息。
整个过程MessageQueue起到存储的作用,Looper就是一个操作者,而handler就是一个用户与数据的中间件。

Read More