Android第七天
来源:互联网 发布:讨鬼传极优化 编辑:程序博客网 时间:2024/05/22 10:55
- Params 启动任务执行的输入参数,比如HTTP请求的URL。 一般用String类型;
- Progress 后台任务执行的百分比。 一般用Integer类型;
- Result 后台执行任务最终返回的结果,一般用byte[]或者String。
1) 定义AsyncTask的子类;2) 实现AsyncTask中定义的方法:(可以全部实现,也可以只实现其中一部分)
- onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
- doInBackground(Params...), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
- onProgressUpdate(Progress...),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
- onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
使用提示对话框:
public classMainActivity extends Activity {
private Button button;
private TextView textView;
private ImageView iv;
private int size=0;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button1);
iv=(ImageView)findViewById(R.id.iv);
textView=(TextView)findViewById(R.id.textView1);
button.setOnClickListener(newOnClickListener(
) {
@Override
public voidonClick(View v) {
newMyTask(MainActivity.this).execute("http://www.baidu.com/img/bdlogo.gif");
}
});
}
class MyTask extendsAsyncTask<String,Integer,Bitmap>{
private ProgressDialog pd;
private Context context;
public MyTask(Contextcontext) {
this.context=context;
pd=new ProgressDialog(context);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setIcon(R.drawable.ic_launcher);
pd.setTitle("提示");
pd.setMessage("正在下载,请耐心等待");
pd.setProgress(0);
}
//是在doInBackgroud之前执行的,主要是做工作线程之前的准备工作。
@Override
protected void onPreExecute(){
pd.show();
}
@Override
protected BitmapdoInBackground(String... params) {
Stringpath=params[0];
URL url=null;
HttpURLConnectionconn=null;
ByteArrayOutputStreambos=null;
Bitmap bitmap=null;
try {
url=newURL(path);
conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setConnectTimeout(2000);
conn.connect();
intcode=conn.getResponseCode();
intsum=conn.getContentLength();
if(code==200) {
InputStreamis= conn.getInputStream();
bos=newByteArrayOutputStream();
byte[]b=new byte[2];
int len=-1;
while((len=is.read(b))!=-1) {
bos.write(b,0, len);
bos.flush();
size+=len;
//通知publishProgress
publishProgress((int)(size/(float)sum*100));
}
byte[]v=bos.toByteArray();
bitmap=BitmapFactory.decodeByteArray(v,0,v.length);
}
} catch(MalformedURLException e) {
// TODOAuto-generated catch block
e.printStackTrace();
} catch (IOExceptione) {
// TODOAuto-generated catch block
e.printStackTrace();
}finally{
conn.disconnect();
try {
bos.close();
} catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
return bitmap;
}
@Override
protected voidonProgressUpdate(Integer... values) {
pd.setProgress(values[0]);
}
@Override
protected voidonPostExecute(Bitmap result) {
iv.setImageBitmap(result);
pd.dismiss();
}
}
}
- Android第七天
- Android基础第七天
- Android第七天
- Android----基础----第七天----Activity
- Android 第七天(上午)
- Android 第七天(下午)
- android基础_第七天
- 我的android(第七天)
- Android 第七天重置版_BroadCastReceiver
- Android 第七天重置版_BroadCastReceiver_注意事项
- Android学习第七天 Activity细讲
- 第七天 Android学习总结(广播接收者)
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 第七天
- 识别常见编码格式文件并转换成UTF-8编码的java实现
- Spring Security hello world example
- IEEEtran参考文献乱码
- 关于Fragment嵌套Fragment中onActivityforresult无法调用的解决
- IOS常用第三方框架 --- ZAActivityBar 提示效果
- Android第七天
- MATLAB 线性运算之减法运算及其应用
- Hadoop Mapper 阶段将数据直接从 HDFS 导入 Hbase
- 百度面试题:求绝对值最小的数
- 利用ObjectInputStream、ObjectOutputStream序列化多个对象
- 字符串分割函数strtok使用
- 互联网公司的一点经验
- ASP.NET MVC 4 中的JSON数据交互总结
- 数据挖掘笔记:分类和预测bayes,svm等