zoukankan      html  css  js  c++  java
  • Android子线程更新主界面

        学习什么的还是要真正的有应用,有需求才能在最短的时间里面牢牢掌握一项技术。

    今天就是这样的,产品一个需求下来,十万火急啊。然后之前只稍稍接触过,只能硬着头皮上了。最后牢牢地掌握了最简单的Handler技术,闲话不多说了!

        每一个做android的人都知道,android的内存可谓是存M存金啊!然后我们自然知道,而且Google在设计的时候也充分的考虑到了这一点,所以,我们的UIThread里面一般不做耗时的工作,比如请求网络,比如执行一些比较耗时的逻辑,比如比如加载图片,比如,哦,暂时只碰到过这些了。然后我们Google就给我们提供了好多吧多的方法来解决啦,像另起一个异步线程来请求网络啊像用UIThread里面调用子线程来更新啦,像使用RunOnUIThread方法啦,等等等等。然后其他高大的功能呢还暂时没掌握好,今天掌握了Handler这一个比较平民化的小功能。

        众所周知,Handler可以结合子线程通过主线程来更新UI界面,然后就不会耗费系统太多的内存了。你如一定要去了解它内部的架构的话,你会在网上找到一大堆,涉及到Looper ,MessageQuenn,Message,以前在学习的时候就了解过,你要让我给你来说出个所以然的话我会将我背下来的相关东西背给你听!!!工作了就安安心心的掌握功能吧!!至于那些架构什么的要用到的时候好好弄一下就好了,背的都是拿来面试的!!

        上代码!!

    首先,我们在activity里面创建Handler对象:

    private Handler handler1 = new Handler(){};

    然后再新建线程:

    Thread myThread=new Thread(new Runnable(){
          @override
        run(){
    
        }        
    });

    在线程里面写入一些设置和更改:

    ProductListRequest param = new ProductListRequest();
    param.setOrgId("1234");
    param.setOrgName("上海浦东");
    param.setPageSize(10);
    param.setPageIndex(1);
    ProductListResponse result = SyncApi.getProductList(param);

    然后下一步就是创建Message对象,通过handler来获得,并给它赋一个标识。然后再将得到的要去改变UIThread的变量赋值给msg,再将它发送给handler;

    Message msg=handler.obtainMessage();
    msg.what=RESULT;//RESULT是在activity里面定义的一个全局的常量,值为1
    msg.obj=result;
    handler.sendMessage(msg);

    然后再开启线程就可以了。最后再在Handler里面获取Message.并在Handler里面更新UI。

    if(msg.what==SHENQINGXIANGQING)
      {
        GetPreApplyDetailResponse result=(GetPreApplyDetailResponse) msg.obj;
    tvResult.setText(result.getBussinessCode()); }

    然后整个代码如下:

    private int RESULT=1;
        
        private Handler handler = new Handler(){
            public void handleMessage(Message msg) {
                if(msg.what==RESULT){
                    GetPreApplyDetailResponse result=(GetPreApplyDetailResponse) msg.obj;
                tvResult.setText(result.getBussinessCode());
                }
    
    Thread myThread=new Thread(new Runnable() {
                    
                    @Override
                    public void run() {
                        Message msg=handler1.obtainMessage();
                        msg.what=RESULT;
                        msg.obj=result;
                        handler1.sendMessage(msg);
                huankuanqingqiuThread.start();
            
        }
  • 相关阅读:
    UVA 10905
    UVA 10859 树形DP
    LA 4794 状态DP+子集枚举
    LA 3695 部分枚举
    UVA 11825 状态压缩DP+子集思想
    UVA 10891 区间DP+博弈思想
    HDU 5239 上海大都会 D题(线段树+数论)
    HDU 5242 上海大都会 G题
    HDU 5241 上海大都会 F题
    P1359 租用游艇
  • 原文地址:https://www.cnblogs.com/BobAdmin/p/4693101.html
Copyright © 2011-2022 走看看