小知识:当指定宽或高为0时,weight代表渲染的权重。当指定宽高不为0时,代表渲染的优先级。值越大,代表优先级越低。举例说下:一个LinearLayout显示一张图、一个按钮,当图片设置高为match_parent时,按钮就看不到了;此时如果weight设置一个大于0的数(越大越好),此时按钮就会显示出来,图和按钮占满LinearLayout。
内部类访问外部变量的方法:将变量设置为final。
BitmapFactory:可以直接从不同的源(文件,流,byteArrays)创建位图对象。
1、
4.0以上的系统不允许网络操作在主线程里。
ANR:application not response程序无响应。
产生的原因:主线程要做很多事情,响应点击事件,更新ui。若在主线程里面阻塞太久,应用程序就会无响应。
为了避免应用程序出现anr,所有的耗时操作都应放在子线程里面执行。
2、
更新ui内部实现:更新界面时做了个检查,更新完ui后,检查这个更新的操作是否在主线程代码执行的。如果是,没问题;如果不是,立刻抛出一个运行时异常:ViewRootImpl$CalledFromWrongThreadException。它不是不允许子线程更改ui,它是在子线程更改完ui后,发现有子线程更改ui,才抛出一个异常。
Handler:消息处理器,用来发送和接受消息
Message:消息。
属性:what:指定消息内容(消息解析时用到)。obj:指定消息传递的数据
sendMessage():发送消息
handleMessage():处理消息
子线程想要更改界面:1、主线程创建消息处理器2、子线程利用handler发送一条消息,消息被放在主线程的消息队列。3、主线程里有一个looper(消息的轮询器)。如果looper发现了新的消息,调用handlemessage方法处理消息。
3、
访问网络的步骤:根据URL发送http请求,设置连接参数,获取响应结果。更简单点说URL建立连接,HttpURLConnection传输信息。
URL url=new URL(String path);
url.openConnection():返回一个http连接
HttpURLConnection:通过web发送和接受数据。
setRequestMethod():请求方式。
setConnectionTimeout():设置连接最大连接时间。
setReadTimeout():读取数据最大时间。
setRequestProperty():设置请求参数。
getResponseCode():获得响应码。200代表ok,404代表资源未找到,503代表内部错误。
getInputStream():获取输入流。