半期考试 之 多线程2

Posted 梦想家哈儿和他的bug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了半期考试 之 多线程2相关的知识,希望对你有一定的参考价值。

半期考试 之 AsyncTask

要求:

使用AysncTask实现进度条

<?xml version="1.0" encoding="utf-8"?>
<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:gravity="center"
    tools:context=".SecondActivity">

    <Button
        android:layout_centerInParent="true"
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点我加载"/>

    <TextView
        android:id="@+id/text"
        android:layout_below="@+id/button"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="还没开始加载!" />

    <ProgressBar
        android:layout_below="@+id/text"
        android:id="@+id/progress_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:progress="0"
        android:max="100"
        style="?android:attr/progressBarStyleHorizontal"/>

    <Button
        android:layout_below="@+id/progress_bar"
        android:layout_centerInParent="true"
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="cancel"/>
</RelativeLayout>
public class SecondActivity extends AppCompatActivity implements View.OnClickListener 
    // 线程变量
    MyTask mTask;

    //布局中的UI组件
    Button button,cancel; // 加载、取消按钮
    TextView text; // 更新的UI组件
    ProgressBar progressBar; // 进度条


    private class MyTask extends AsyncTask<String, Integer, String> 

        // 方法1:onPreExecute()
        // 作用:执行 线程任务前的操作
        @Override
        protected void onPreExecute() 
            text.setText("加载中");
            // 执行前显示提示
        


        @Override
        protected String doInBackground(String... params) 

            try 
                int count = 0;
                int length = 1;
                while (count<99) 

                    count += length;
                    // 可调用publishProgress()显示进度, 之后将执行onProgressUpdate()
                    publishProgress(count);
                    // 模拟耗时任务
                    Thread.sleep(50);
                
            catch (InterruptedException e) 
                e.printStackTrace();
            

            return null;
        

        // 方法3:onProgressUpdate()
        // 作用:在主线程 显示线程任务执行的进度
        @Override
        protected void onProgressUpdate(Integer... progresses) 

            progressBar.setProgress(progresses[0]);
            text.setText("loading..." + progresses[0] + "%");

        

        @Override
        protected void onPostExecute(String result) 
            // 执行完毕后,则更新UI
            text.setText("加载完毕");
        

  
        @Override
        protected void onCancelled() 

            text.setText("已取消");
            progressBar.setProgress(0);

        
    

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        // 绑定UI组件
        setContentView(R.layout.activity_second);

        button = (Button) findViewById(R.id.button);
        cancel = (Button) findViewById(R.id.cancel);
        text = (TextView) findViewById(R.id.text);
        progressBar = (ProgressBar) findViewById(R.id.progress_bar);

     
        mTask = new MyTask();
   
        button.setOnClickListener(this);
        cancel.setOnClickListener(this);
    

    @Override
    public void onClick(View v) 
        switch (v.getId())
            case R.id.button:
              
                mTask.execute();
                break;
            case  R.id.cancel:
                mTask.cancel(true);
                break;
        
    


运行效果:

以上是关于半期考试 之 多线程2的主要内容,如果未能解决你的问题,请参考以下文章

半期考试 之 多线程2

半期考试 之 多线程

半期考试 之 多线程

半期考试 之 多线程

半期考试 之 SQLite 操作2

半期考试 之 SQLite 操作2