关于AsyncTask的publishProgress
循环播放文字广告:
activity_main.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="example.com.handler.MainActivity"
tools:showIn="@layout/activity_main">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello World!"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="start"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn1"
android:text="stop"/>
</LinearLayout>
下面是MainActivity.java 文件
package example.com.asynctaskdemo;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv;
private Button btn;
private Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initView() {
tv = (TextView) findViewById(R.id.tv);
btn = (Button) findViewById(R.id.btn);
btn1 = (Button) findViewById(R.id.btn1);
}
private class MyAsyncTask extends AsyncTask<String, Integer, Void> {
private TextView textView;
private String[] str = {"First advertisement", "Second advertisement"};
private int n = 0;
private boolean stop = false;
public MyAsyncTask(TextView textView) {
this.textView = textView;
}
public void setStop(boolean stop){
this.stop=stop;
}
@Override
protected Void doInBackground(String... params) {
Log.d("Tag","doInBackgroud");
while (!stop) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* n就是传入下面onProgressUpdate 的参数
* publishProgress是跨线程的,
*/
publishProgress(n);
n++;
Log.i("Tag","publishProgress"+n);
Log.d("Tag", "publishProgress");
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
Log.d("Tag", "onProgressUpdate");
Log.i("Tag","n="+values[0]);
textView.setText(n+str[values[0]%2]);
// textView.setText("noThing");
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
textView.setText("广告结束");
}
}
private MyAsyncTask myTask;
private void initListener() {
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myTask = new MyAsyncTask(tv);
myTask.execute();
}
});
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myTask.setStop(true);
}
});
}
}
publishProgress
最新推荐文章于 2022-06-15 09:21:14 发布