人这一辈子总会犯错,而自己,这一次,却做了一个言而无信的人,答应的事情却没有做到.严重的反省吧,睡不着.
凡事都是做人第一,做人是一辈子的学问
思前想后,学过的东西,不总结,也许很快就会忘掉了.
有些东西虽然简单,但是记到博客上来,希望大家看一看,一笑而过吧.
当手机跟服务器进行数据交互的时候,我们不能把耗时的操作放在主线程中,要做的事情就是异步.
而要异步,我们也要在界面上反馈一个信息给用户,让用户知道应该等待数据下载....
先看两张图,这就是最常用的异步弹出窗口了
上代码吧 都比较简单,只是发发博客,为以后写博客巩固基础
关于线程,看了比较多的建议...不管是线程也好还是其他什么都好,android是一个手机客户端,
大家在写代码的同时还是非常有必要针对内存优化,代码健壮做一些相应上的代码优化的.
比如 少用new的关键字,对象多复用..等等.我再这里就不叙述了,我个人也不是非常的强悍
package tree.love.UI.Demo.ProgressDialog.activity;
import tree.love.UI.Demo.ProgressDialog.R;
import .Activity;
import .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(.button).setOnClickListener(this);
findViewById(.button1).setOnClickListener(this);
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case .button://按钮1
loadingDialog = PrintAlertUtil.showDialog(this, "正在下載...");
Thread thread01 = new Thread(new Runnable() {
@Override
public void run()
{
downLoad(5,false);
}
});
thread01.start();
break;
case .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);
}
}
}还有另一个类的,打包是为了以后如果Activity多了 就不用老是在Activity中把ProgressDialog给new出来
没有写过多的注释,希望大家能看明白,如果真的不明白 就提问吧,我会就我本身懂的大家回复
package tree.love.UI.Demo.ProgressDialog.activity;
import .Activity;
import .ProgressDialog;
import android.widget.Toast;
public class PrintAlertUtil
{
public static ProgressDialog showDialog(Activity context,String strContent)
{
if (context != null)
{
ProgressDialog infoDialog = new ProgressDialog(context);
infoDialog.setMessage(strContent);
infoDialog.show();
return infoDialog;
}
return null;
}
public static ProgressDialog showDialog(Activity context,String strContent,int max)
{
if (context != null)
{
ProgressDialog dialog = new ProgressDialog(context);
dialog.setMessage(strContent);
//设置风格为条状
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置最大值
dialog.setMax(max);
//设置初始值
dialog.setProgress(0);
dialog.show();
return dialog;
}
return null;
}
/**
* @param infoDialog
*/
public static void dismissDialog(ProgressDialog infoDialog)
{
if (infoDialog != null)
{
infoDialog.dismiss();
}
infoDialog = null;
}
public static void showToast(Activity ac ,String content)
{
Toast.makeText(ac, content, Toast.LENGTH_SHORT).show();
}
}
源码我会上传..大家跑一跑就可以直接拿去用了
















