文档章节

android中的线程

qii
 qii
发布于 2014/03/24 17:28
字数 377
阅读 106
收藏 3

今天写的功能是一个loading界面,Loading界面有一个进度条,进度条完成之后,重新跳转到另外一个activity,但是这样做的话,使用返回键时,会返回到Loading界面,因此,改为在Loading界面之后,重新设置布局。

进度条在一个线程中执行,代码如下:

 new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                for(int i = 0; i < 100; i ++) {
                    YaMain.this.progressBar.setProgress(i);
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                LinearLayout layout = new LinearLayout(YaMain.this);
                layout.setBackgroundColor(getResources().getColor(R.color.bg));
                
                TextView tv = new TextView(YaMain.this);
                tv.setText(R.string.app_name);
                layout.addView(tv);
                setContentView(layout);
                
            }
            
        });

加上这段代码之后,重新运行程序,程序发生错误而意外终止。不得已,改用handler来处理。

代码如下:

@SuppressLint("HandlerLeak") 
    private Handler myHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if(msg.arg1 <= 100) {
                YaMain.this.progressBar.setProgress(msg.arg1);
                this.postDelayed(YaMain.this.myRunnable, 10);
            }
        }
    };
    
    private Runnable myRunnable = new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            Message msg = YaMain.this.myHandler.obtainMessage();
            msg.arg1 = (int) Math.ceil(YaMain.this.progressBar.getMax() / 100) + YaMain.this.progressBar.getProgress();
            YaMain.this.myHandler.sendMessage(msg);
            if(YaMain.this.progressBar.getProgress() >= YaMain.this.progressBar.getMax()) {
                YaMain.this.myHandler.removeCallbacks(this);
                LinearLayout layout = new LinearLayout(YaMain.this);
                layout.setBackgroundColor(getResources().getColor(R.color.bg));
                
                TextView tv = new TextView(YaMain.this);
                tv.setText(R.string.app_name);
                layout.addView(tv);
                setContentView(layout);
            }
        }
        
    };

在handleMessage里面,可以加入多个需要启动的线程,但是需要做好结束条件的判断,否则线程会一直运行。

这样的话,在需要的地方启动线程即可。

this.myHandler.post(this.myRunnable);

如果逻辑比较复杂的,可以把handler及runnable重新实现为自己的类,在调用。

这是我参考网上的资料写的,若是有不足之处或是更好的方法,欢迎交流指正。


© 著作权归作者所有

共有 人打赏支持
qii

qii

粉丝 13
博文 77
码字总数 23520
作品 0
昆明
高级程序员
私信 提问
Android 的消息队列模型

Android通过Looper、Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环)。 Android系统中,Looper负责管理线程的消息队列和消息循环。我...

华宰
2011/05/09
998
0
Android中AsyncTask的简单用法

在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给用户带来不好的用户体验。但是在子线程中无法去操作主线程(U...

带梦想一7飞
2012/07/09
0
0
深入解读Linux与Android的相互关系& Android消息处理系统的原理

深入解读Linux与Android的相互关系 大家都知道Android是基于Linux内核的操作系统,也曾经和Linux基金会因为内核问题产生过分歧,本文将开始对Android的内核进行剖析,主要介绍Android和Linux...

AlphaJay
2011/07/29
0
0
Android LiveData简介(一)

Android LiveData简介(一) 使用Android的LiveData,需要在gradle添加引用: (二)构建Observer,在Observer的onChanged中等待变化数据传导过来。 在LiveData中的数据变化,通过postValue...

开开心心过
2017/11/21
0
0
深入理解Android消息处理系统——Looper、Handler、Thread

熟悉Windows编程的朋友可能知道Windows程序是消息驱动的,并且有全局的消息循环系统。而Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制。实际上谷歌参考了Windows的消息循...

惊天
2011/07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

day11

architect刘源源
今天
7
0
论学好Linux系统的超级重要性

不知道各位在日常的工作生活中有没有接触过“rm -rf /*”这个命令,因为这个命令搞出来的事情可还不少呢!前段时间就在一个群里看到了有个小伙子,老板让他去维护一下服务器,这小伙也不太懂...

Linux就该这么学
昨天
6
0
git 使用

1,首先在github配置好信息和仓库,然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2,与远程分支建立连接 git checkout -b test......

天王盖地虎626
昨天
3
0
git checkout 命令详解

在日常的git操作中,git checkout——检出,是我们的常用命令。最为常用的两种情形是创建分支和切换分支。 在下面的命令中,使用了一些简写,在这里说明一下: git st # git statusgit ci ...

shzwork
昨天
11
0
【Nginx】Nginx多级代理,获取客户端真实请求IP以及每级代理IP

Nginx多级代理,获取客户端真实请求IP以及每级代理IP 如图所示,每一级nginx里的location配置里需要加上对应的配置,最后一级nginx是直接到应用,测试时为了方便,直接用echo模块去测试,打印...

薛定谔的旺
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部