android异步操作
16lz
2021-01-23
因为一次偶然的机会让我对移动开发产生了浓厚的兴趣,于是就把mars老师的四季的视频全都下载了下来开始自学android,之前看视频自学一直也没写过博客,现在也看到了第四季就想写一写博客分享一下我的学习经历。
1、要实现异步操作就要用到android提供一个AsyncTask类,这个类是一个泛型。下面附上我的代码,我直接在代码中说明
package com.example.async2;import android.os.AsyncTask;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;/** * 1、继承AsyncTask<E1, E2, E3>,其中E1,E2,E3分别是三个类型 * 2、必须要重写的方法是doInBackground方法 * 3、第一个类型对应doInBackground方法的参数类型 * 4、第二个类型对应于onProgressUpdate方法的参数类型 * 5、第三个对应于onPostExecute方法的参数类型 * 6、在生成该类的对象来实现异步操作的时候要调用execute方法 * 7、调用该方法之后首先执行的是onPreExecute方法,然后执行doInBackground方法,最后执行onPostExecute方法 * * @author why * */public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {// UI线程中的文本框控件private TextView textView = null;// UI线程中的进度条控件private ProgressBar progressBar = null;public ProgressBarAsyncTask(TextView textView, ProgressBar progressBar) {this.textView = textView;this.progressBar = progressBar;}/** * 改方法不运行在UI线程之中,所以在该方法中不能对UI中的控件进行操作 * 执行一些耗时较长的方法 */@Overrideprotected String doInBackground(Integer... params) {// TODO Auto-generated method stubNetOperator operator = new NetOperator();int i = 0;for (i = 10; i < 100; i += 10) {operator.operator();publishProgress(i);}return i + "";}/** * 该方法运行在UI线程中实现对UI线程中的控件的一些操作 */@Overrideprotected void onPreExecute() {// TODO Auto-generated method stub // 设置控件可见textView.setVisibility(View.VISIBLE);progressBar.setVisibility(View.VISIBLE);textView.setText("开始进行异步操作");}/** * 该方法运行在UI线程中实现对UI线程中的控件的一些操作 */@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubtextView.setText("异步操作结束" + result);progressBar.setVisibility(View.GONE);}/** * 1、该方法运行在UI线程中实现对UI线程中的控件的一些操作 * 2、在doInBackground方法中每次调用publishProgress都会触发这个方法的执行 */@Overrideprotected void onProgressUpdate(Integer... values) {// TODO Auto-generated method stubprogressBar.setProgress(values[0]);}}
2、主界面Activity
package com.example.async2;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;/** * 主界面,有TextView,ProgressBar和Button三个控件 * @author why * */public class MainActivity extends Activity {private TextView textView = null;private ProgressBar progressBar = null;private Button button = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);// 设置布局文件setContentView(R.layout.acttivity_main);// 通过ID获取控件textView = (TextView) findViewById(R.id.textView);progressBar = (ProgressBar) findViewById(R.id.progressbar);button = (Button) findViewById(R.id.button1);// 给button绑定监听器button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubProgressBarAsyncTask task = new ProgressBarAsyncTask(textView, progressBar);task.execute(1000);}});}}
3、NetOperator模拟执行时间较长的一些操作
package com.example.async2;/** * * @author why * */public class NetOperator {public void operator() {try {// 将当前线程休眠,模拟执行时间较长的操作Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
4、布局文件,很简单只有三个控件。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" /> <ProgressBar android:id="@+id/progressbar" android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:visibility="gone" /> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/button1" /></LinearLayout>
更多相关文章
- Android 解决65535的限制 使用android-support-multidex解决Dex
- (五)Android线程及其消息机制
- Android 应用语言切换的三种方法
- Android CheckBox中设置padding无效问题解决方法
- IKNinePhotoView 是一个开源的 Android 九宫格控件,可以自适应宽
- Android设备Root检测方法
- Android之——自定义复合控件的实现
- Android Studio中创建Selector文件的方法