Android Http的多线程应用

多线程是开发客户端程序的重要概念,无论你是PC,Mobile,还是Tablet。因为UI线程和通讯线程,操作线程都会交织在一起,如果处理不好会让你的程序非常的不好,损耗资源,费尽资源的情况都是因为线程没有处理好,下面我们来看看Android的线程是如何处理的

1:Handler偷笑

先看这个错误

Only the original thread that created a view hierarchy can touch its views,意思是只有原始线程创建了一个视图层次能改变界面,就是说你起了一个新线程只能用来传输数据,不能在新线程里改变ui状态。那到底怎么使用呢。Android里处理通信有Handler和Looper,AsyncTask,还有Service这个是用于全局通信的,各有各的应用场景据说Handler的效率是最高的,到底是不是,这个需要有一定的数据支撑。下面我们看看Handler的处理Http通信的线程的处理逻辑:

   final Handler myHandler = new Handler();
   final Runnable updateUIThead = new Runnable() {
        public void run() {
            updateUI();
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        NetworkOperation();
      }
    //网络操作一定要单独的线程来处理
    protected void NetworkOperation() {
        Thread t = new Thread() {
            public void run() {
                doSomething(); //处理得到结果了,这里一些内容保存在主类的成员变量中
                myHandler.post(updateUIThead); //高速UI线程可以更新结果了
            }
        };
        t.start();
    }
    private void updateUI() {
    }
通过上面的代码,很清晰的myHander.post把更新ui的线程放入到了handler中,在updateUI中就可以调用本Activity的UI元素进行UI设置,如果你不这样操作,对不起会出现Only the original thread that created a view hierarchy can touch its views的提示。注意android概念中的耗时操作,只要是耗时那就是new thread。

2:AsyncTask偷笑
AsyncTask,这个网上的资料很多不具体详细讲了,主要实现doInBackgroud去联网获得JSONObject,在onPostExecute(JSONObject result)自然就会获得这个值不过需要

super.onPostExecute(result)
其实很简单,就是Android底层已经封装好了通道,只需要扩展他,并且分别实现响应的按他的要求方法,你就驾驭了AsyncTask

3:Service吐舌头

Service只是后台运行的线程,不能用来做耗时操作,主要是用来做一些socket长链接,播放音乐,监听某个事件,启动一个服务等等,跟AsyncTask一样 extends Service你将会拥有固定的需要实现的方法,去实现他吧,不要犹豫,搞清楚每个方法体的功能,实现后你就获得了他的功能,看看他的生命周期:

context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy() 
context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy() 

综合以上,再回过头来看看其实Android的线程通信也不难吧,不过细节的地方还有很多需要学习和了解,查阅资料,我们伟大的互联网上有很多伟大的网友提供了很多,只要想去知道,总有能明白的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值