AnsycTask的使用

AsyncTask异步任务(例:时间显示)

**异步任务参考教程(概念理解):https://www.runoob.com/w3cnote/android-tutorial-ansynctask.html

1.布局一个TextView显示时间activity_main.xml
在这里插入图片描述

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    >
	
    <TextView
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="24sp" />
    
    <Button 
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:text="开始"
    />
</RelativeLayout>

2.MainActivity.java

import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

	private  TextView tv;
	private Button btn;
	//private AtomicBoolean started=new AtomicBoolean();
	private MyAnsycTask mat;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv=(TextView) findViewById(R.id.time);
		btn=(Button) findViewById(R.id.button);
		btn.setOnClickListener(this);
	}

	
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}	
	@Override
	public void onClick(View v) {
		mat=new MyAnsycTask(tv,btn);
		mat.execute(100);		
	}
}

3.MyAsyncTask.java

package guun.example.asynctask;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import android.os.AsyncTask;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MyAnsycTask extends AsyncTask<Integer, Integer,String>{
	private TextView tv1;
	private Button btn1;
	private Date date;
	private SimpleDateFormat sdf;
	public MyAnsycTask(TextView tv1,Button btn1) {
		this.btn1=btn1;
		this.tv1=tv1;
	}
	@Override
	protected String doInBackground(Integer... params) {
		for(int i=0;;i++) {                       //时间无休止
			try {
				Thread.sleep(100);          //线程休眠!!!!不能少
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
			publishProgress(i);
		}
	}
	protected void onPreExecute() {
		tv1.setVisibility(View.VISIBLE);
		tv1.setTextSize(18);
		btn1.setEnabled(false);
	}
	protected void onProgressUpdate(Integer...values) {
		date=new Date();
		sdf=new SimpleDateFormat("yyyy-mm-dd hh:mm:ss",Locale.CHINA);
		date.setTime(System.currentTimeMillis());
		String ds = sdf.format(date);
		tv1.setText(ds);
	}
}

效果图:
在这里插入图片描述
在这里插入图片描述
该task只能被执行一次,生命周期只有一次,否则多次调用时会出现异常,如图
在这里插入图片描述
如果需要重新显示动态刷新效果,需要关闭android模拟器,然后重新开启,退出应用再次执行没有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值