Android_UI_中常用的两种ProgressDialog,当手机跟服务器进行数据交互的时候,我们不能把耗时的操作放在主线程中,要做的事情就是异步.
而要异步,我们也要在界面上反馈一个信息给用户,让用户知道应该等待数据下载....
先看两张图,这就是最常用的异步弹出窗口了
具体下载目录在 /pub/Android源码集锦/2011年/12月/Android_UI_中常用的两种ProgressDialog/
上代码吧 都比较简单,关于线程,看了比较多的建议...不管是线程也好还是其他什么都好,android是一个手机客户端,
大家在写代码的同时还是非常有必要针对内存优化,代码健壮做一些相应上的代码优化的.
比如 少用new的关键字,对象多复用..等等.我再这里就不叙述了,我个人也不是非常的强悍
package tree.love.UI.Demo.ProgressDialog.activity; import tree.love.UI.Demo.ProgressDialog.R; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; public class HomeActivity extends Activity implements OnClickListener { private ProgressDialog loadingDialog = null; /** 第一种风格 **/ private static final int LOADING_STYLE_01 = 1 ; /** 第二种风格 **/ private static final int LOADING_STYLE_02 = 2 ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.button).setOnClickListener(this); findViewById(R.id.button1).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button://按钮1 loadingDialog = PrintAlertUtil.showDialog(this, "正在下載..."); Thread thread01 = new Thread(new Runnable() { @Override public void run() { downLoad(5,false); } }); thread01.start(); break; case R.id.button1://按钮2 loadingDialog = PrintAlertUtil.showDialog(this, "正在更新", 100); Thread thread02 = new Thread(new Runnable() { @Override public void run() { downLoad(10,true); } }); thread02.start(); break; } } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case LOADING_STYLE_01: //关闭对话框 PrintAlertUtil.dismissDialog(loadingDialog); //提示 PrintAlertUtil.showToast(HomeActivity.this, msg.obj.toString()); break; case LOADING_STYLE_02: int p = msg.getData().getInt("percent"); if (p == 100) { //更新完成,关闭对话框 loadingDialog.setProgress(p); PrintAlertUtil.dismissDialog(loadingDialog); PrintAlertUtil.showToast(HomeActivity.this, msg.obj.toString()); } else { //更新进度条 loadingDialog.setProgress(p); } break; } } }; /** * 模擬下載操作 */ public void downLoad(int number,boolean download) { for (int i = 0; i < number; i++) { /** 每次模拟停顿耗时0.5秒 **/ try{Thread.sleep(500);}catch (InterruptedException e){e.printStackTrace();} if (download) { /** 每循环一次更新一次进度 **/ int percent = (i+1)*10; Message message = new Message(); Bundle bundle = message.getData(); bundle.putInt("percent", percent); message.setData(bundle); message.what = LOADING_STYLE_02; if (i == 9) { message.obj="更新完毕"; } mHandler.sendMessage(message); } } if (!download) { Message message = new Message(); message.what = LOADING_STYLE_01; message.obj = "下载完成"; mHandler.sendMessage(message); } } }