Android Progress进度条代码,进度条刷新问题探讨

转载注明出处,Lee http://blog.csdn.net/hnulwt/article/details/44462177
今天看到讨论说关于进度条走的慢的问题。实际问题是这样的:后台执行的程序速度会很快,但是在界面上感觉得到进度条是走的比较慢的。为此,做了一个小实验,代码上实验在1秒的时间 通过俩种方式增加进度条至100%(每隔10ms增加1%和 每隔250ms增加25%),验证哪种方式给人的感觉快,但是在demo做出来之后,确发现了新的问题,想在此与大家共同讨论。

问题

根据代码,我预想的结果应该是俩个进度条增加的速度相同,但是经过我的测试,点击 同时增加 按钮,跳跃增加那个进度条总是会比逐步增加的进度条要快。
界面如下(源码及布局文件在后面):
这里写图片描述

分析:

通过Handler机制更新Progress,在点击“同时增加”按钮后,分别post两个Runnable对象到消息队列,然后执行Runnable里面的run方法,在进度数值增加后 发送message到消息队列,最后handleMessage,更新进度条,然后再分别post Runnable对象。。。如此循环直到进度条满。

目前的结论

通过测试 “逐步增加”“跳跃增加”“同时增加”三个执行过程的TraceView,结果看不出有什么差别。看了相关的源码,觉得在处理过程中耗时操作就是this锁了吧。由于每隔10ms增加1%发送消息太频繁、界面更新也频繁,会导致逐步增加的速度偏慢。不知各位大神如何看这个问题,希望大家不吝赐教。

在贴源码之前先说一句,网上查到的一些利用Handler更新进度条的代码是有问题的。他在removeCallbacks之前又post了runnable,导致remove掉上一个runnable后又加入一个新的runnable,这样无限循环下去,占用资源。

Demo

MainActivity.java

package com.example.progress;

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

public class MainActivity extends Activity implements OnClickListener
{
   
    private static final int PERCENT_TOTAL = 100;
    ProgressBar mProgressFluency, mProgressJumpy;

    int percentFluency  = 0;
    int percentJumpy    = 0;

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

        mProgressFluency = (ProgressBar) findViewById(R.id.progressBar1);
        mProgressJumpy = (ProgressBar) findViewById(R.id.progressBar2);

        ((Button) findViewById(R.id.button_fluency)).setOnClickListener(this);
        ((Button) findViewById(R.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值