资讯专栏INFORMATION COLUMN

android 启动一个线程处理并计算进度(完成度)

shaonbean / 2628人阅读

1.activity 代码

package com.test.org.helloworld;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.os.Message;

public class MainActivity extends Activity {

    private TextView mTextView01;
    private Button mButton01;
    private ProgressBar mProgressBar01;
    public int intCounter = 0;

    //自定义Handle信息代码用做别的识别
    protected static final int GUI_STOP_NOTIFIER = 0x108;
    protected static final int GUI_THREADING_NOTIFIER = 0x109;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton01 = (Button)findViewById(R.id.myButton1);
        mTextView01 = (TextView)findViewById(R.id.myTextView1);

        mProgressBar01 = (ProgressBar)findViewById(R.id.myProgressBar1);
        mProgressBar01.setIndeterminate(false);

        mButton01.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View view) {
                mTextView01.setText(R.string.string_start);
                mProgressBar01.setVisibility(View.VISIBLE);
                mProgressBar01.setMax(100);

                mProgressBar01.setProgress(0);

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for(int i=0;i<10;i++){
                            try{
                                Thread.sleep(1000);
                                intCounter = (i+1)*20;
                                if(i==5){
                                    Message m = new Message();
                                    m.what = MainActivity.GUI_STOP_NOTIFIER;
                                    MainActivity.this.myMessageHandle.sendMessage(m);
                                    break;
                                }else{
                                    Message m = new Message();
                                    m.what = MainActivity.GUI_THREADING_NOTIFIER;
                                    MainActivity.this.myMessageHandle.sendMessage(m);
                                }
                            }catch (Exception e){
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
            }
        });
    }

    Handler myMessageHandle = new Handler()
    {
        public void handleMessage(Message msg){
            switch (msg.what){
                case MainActivity.GUI_STOP_NOTIFIER:
                    mTextView01.setText(R.string.str_progress_done);
                    mProgressBar01.setVisibility(View.GONE);
                    Thread.currentThread().interrupt();
                    break;
                case MainActivity.GUI_THREADING_NOTIFIER:
                    if(!Thread.currentThread().isInterrupted()){
                        mProgressBar01.setProgress(intCounter);
                        mTextView01.setText(getResources().getText(R.string.str_progress_start)+
                        "("+Integer.toString(intCounter)+"%)
"+
                         "Progress:"+
                                Integer.toString(mProgressBar01.getProgress())+
                                "
"+"Indeterminate:"+
                                Boolean.toString(mProgressBar01.isIndeterminate())
                        );
                    }
                    break;
            }
            super.handleMessage(msg);
        }
    };

}

2.main.xml文件




    

    

    

3.效果图

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13899.html

相关文章

  • [译]新的高性能计算框架——KernelHive

    摘要:追踪正在进行的计算的状态。为了知道作业的进度,通过监听端口来接受二进制文件发来的信息。子系统监听的子系统包括多种预编译二进制文件。这些二进制文件被分配给对应的在应用层定义好的计算模版。 KernelHive: a new workflow-based framework for multilevel high performance computing using clusters a...

    2shou 评论0 收藏0
  • 深入探讨安卓UI线程与子线程交互5大设计

    摘要:在程序运行的时候就被创建,是一个当中的主线程,主要是负责控制界面的显示更新和控件交互。为了解决这个问题,下面将探讨这线程于子线程之间的五种交互方式。运行在线程,主要目的是为后台线程的运行做准备。然后在线程中创建该类必须在线程中创建。 什么是UI线程 在一个Android 程序开始运行的时候,会单独启动一个Process。默认的情况下,所有这个程序中的Activity或者Service(...

    Alan 评论0 收藏0
  • 如何开发高效的 Android 应用

    摘要:耗电或者内存占用等影响产品效率的每一个问题都会影响的成功。即使高效的代码也是需要时间来运行。最高效的方式就是在类这一级完成这项操作,可以使用或者来创建后台操作。 假如要Google Play上做一个最失败的案例,那最好的秘诀就是界面奇慢无比、耗电、耗内存。接下来就会得到用户的消极评论,最后名声也就臭了。即使你的应用设计精良、创意无限也没用。 耗电或者内存占用等影响产品效率的每一个问题...

    Jinkey 评论0 收藏0
  • AsyncTask 内部实现机制

    摘要:本文试图从的作用说起,进一步的讲解一下内部的实现机制。内部机制内部逻辑主要有二个部分与主线的交互它内部实例化了一个静态的自定义类,这个类是继承自的,在这个自定义类中绑定了一个叫做的对象,每次子线程需要通知主线程,就调用发送消息给。 在 Android 应用开发的过程中,我们需要时刻注意保证应用程序的稳定和 UI 操作响应及时,因为不稳定或响应缓慢的应用将给应用带来不好的印象,严重的用户...

    kohoh_ 评论0 收藏0
  • 自定义版本更新弹窗

    摘要:目录介绍和区别运行原理和源码分析基本属性介绍如何计算动画数据什么是动画更新函数动画数据如何存储的调用运行原理和源码分析属性动画的基本属性属性动画新的概念作用属性动画执行流程属性动画和执行流程属性动画和执行流程属性动画与结合好消息博客笔记大汇 目录介绍 1.Animation和Animator区别 2.Animation运行原理和源码分析 2.1 基本属性介绍 2.2 如何计算动画...

    Eric 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<