android开发之http请求

来源:互联网 发布:调查人力资源矩阵图 编辑:程序博客网 时间:2024/04/29 13:45

接触android的开发半年多了,针对一些问题或者是经验做一些总结记录,以供以后翻阅学习。

android程序开始运行的时候,会单独启动一个process,在默认的情况下,所有的这个程序中的activity和service(activity和service只是android提供的components中的两种,除此之外还有content provide 和broadcast recevier)都会泡在这个process。

一个android的程序默认情况下也只有一个process,但是一个process可以有许多个thread。UI Thread在android程序运行的时候就被创建,是一个Process当中的主线程Main Thread,主要负责控制UI界面的显示、更新和控件的交互。

首先注意两点:

1、android的主线程中不能直接访问网络,UI线程也就是主线程中不能有比较费时的操作,如访问网络,下载数据,查询数据库等,以免阻塞主线程。

2、android的子线程不成直接操作UI,子线程更新ui的是不安全的,多个子线程同时操作一个控件可能发生麻烦,所以android中禁止子线程去更新UI操作,只有主线程才能去更新UI。


Handler就是连接子线程和主线程的桥梁,我们可以在主线程中创建一个子线程来访问网络,子线程访问的结果返回到主线程中来做UI 更新。

直接实现方式:

1、主线程中新建一个子类继承Handler,并重写handleMessage(Message msg)方法实现监听来修改UI等主线程操作

2、主线程中创建一个Thread线程,并将上面的handler实例作为参数传入,

3、在子线程的run方法中待其他操作都完成后调用handler的handleMessage()或者handleEmptyMessage()方法调用主线程的监听。

一些耗时的操作都在子线程的run方法中执行。

主要代码如下:

<span style="white-space:pre"></span>@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.ubunta_btn:MyThread thread = new MyThread(new MyHandler());thread.start();break;}}class MyHandler extends Handler {public void handleMessage(Message msg) {switch(msg.what) {case 10 :text.setText("点击修改");Toast.makeText(getApplicationContext(), "sdsdsd", Toast.LENGTH_LONG).show();break;}}}class MyThread extends Thread {private Handler handler;public MyThread(Handler handler) {this.handler = handler;}@Overridepublic void run() {handler.sendEmptyMessage(10);}}

说明:还有一种做法是activity'直接实现android.os.Handler.Callback接口,直接在activity中重写handleMessage即可实现主线程的监听。


android中还提供了一个抽象类AsyncTask来实现异步的网络访问和UI更新操作,这里没做太多了解。


至于Http请求,android主要使用HttpURLConnection和Apache的HttpClient来访问网络,分get和post 方法

针对http请求可以封装成指定的工具类,以便项目搬运和公用,

实现思路主要是将请求地址url和参数map作为参数,将得到的结果以json形式返回,或者转成指定的java对象即可。




0 0