直接上代码,首先布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_handler_to" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingTop="@dimen/activity_vertical_margin"> <TextView android:id="@+id/info_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/send_info_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送" /> </LinearLayout>
布局文件后,接下来看, activity 的代码 ,原话,直接上代码
package ?; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; /** * @author song * @date :2017/6/9 * @Description: * */ public class HandlerToActivity extends AppCompatActivity { private TextView info; private Button send_info_bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_handler_to); info = (TextView) findViewById(R.id.info_tv); send_info_bt = (Button) findViewById(R.id.send_info_bt); send_info_bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new MyTask().execute("开始"); } }); } class MyTask extends AsyncTask<String, Integer, String> { //在后台线程中执行,onPreExecute之后调用,表示执行一个后台任务 @Override protected String doInBackground(String... params) { Log.d("MyTask", "--------doInBackground------" + params); for (int i = 0; i <= 50; i++) { publishProgress(i * 2); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } return "success"; } //在UI线程调用,可以在执行任务前做准备工作。比较耗时的操作都可以放在这里 @Override protected void onPreExecute() { super.onPreExecute(); info.setText("正在开始更新..."); } //相当于Handler 处理UI的方式 @Override protected void onPostExecute(String s) { super.onPostExecute(s); info.setText(s); } //相当于Handler 处理UI的方式 @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); info.setText("当前进度:" + values[0] + "%"); } // 用户调用取消时,要做的操作 @Override protected void onCancelled() { super.onCancelled(); } } }
完成,拉代码,直接就可以跑。
这是一个简单的代码,其实技术含量还是挺高的