线程

1. 回顾Java当中线程的概念

2. MainThread 与 Worker Thread

3. Android当中的线程使用

 

1. 回顾Java当中线程的概念

   

    两种方法:1.继承 Thread 类 ,

                  2.实现 Runnable 接口 ,

    线程的生命周期:创建--->start就绪状态--->抢CPU运行--->被抢就绪--->..--->死亡状态

    多线程同步:http://www.cnblogs.com/iMirror/p/3742277.html

 

2. MainThread 与 Worker Thread

    MainThread主线程, UI线程都是MainThread主线程 

    其他的都是 Worker Thread

 

    UI线程之外不能修改UI ,除了些特殊的,比如 ProgressBar

  

   

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context="first.pack.MainActivity$PlaceholderFragment" >
11 
12     <ProgressBar
13         android:id="@+id/firstProgreeBar"
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         style="?android:attr/progressBarStyleHorizontal" />
17     
18     <Button
19         android:id="@+id/firstButton"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:text="start"/>
23 
24 </LinearLayout>
 1 public static class PlaceholderFragment extends Fragment {
 2         
 3         private Button button;
 4         private ProgressBar progressBar;
 5 
 6         public PlaceholderFragment() {
 7         }
 8 
 9         @Override
10         public View onCreateView(LayoutInflater inflater, ViewGroup container,
11                 Bundle savedInstanceState) {       //主进程
12             View rootView = inflater.inflate(R.layout.fragment_main, container,
13                     false);
14             
15             button = (Button)rootView.findViewById(R.id.firstButton);
16             progressBar = (ProgressBar)rootView.findViewById(R.id.firstProgreeBar);
17             
18             ButtonListener buttonListener = new ButtonListener();
19             button.setOnClickListener(buttonListener);
20             
21             return rootView;
22         }
23         
24         class ButtonListener implements OnClickListener{
25 
26             @Override
27             public void onClick(View v) {
28                 Thread t = new MyThread();  //继承Thread类
29                 t.start();                  //start开启线程
30             }
31         }
32          
33         class MyThread extends Thread{  //其他进程,也即Worker Thread!!!!!!!
34             @Override
35             public void run() {
36                 for (int i= 0 ; i <= 100; i++){
37                     try {   //try。catch模块快捷书写方法1:eclipse自动提示错误,双击红色叉叉修改
38                                                  //选中try内容,alt+shift+Z
39                         Thread.sleep(100);
40                     } catch (InterruptedException e) {
41                         e.printStackTrace();
42                     }
43                     progressBar.incrementProgressBy(1); //进度加1,在其他进程,也即Worker Thread中,修改UI!!!!!!!
44                 }
45             }
46         }
47     }

           

 

3. Android当中的线程使用

      既然在其他线程中通常是不能修改UI的,那么干脆不要其他线程啊,直接一个主线程,这样可以不呢???

      不能的。

     

     每个应用程序中,主线程作用通常是接收用户输入,以及将运算的结果报告给用户,因此一般是不能被阻塞的

     一些容易阻塞的大工作量的操作,要放在WorkerThread中解决。再将处理后的数据交给MainThread显示

 

     因此接下来的任务就是 在 MainThread 和 WorkerThread 中传递数据的问题!

 

posted @ 2014-07-11 21:11  Mirrorhanman  阅读(165)  评论(0)    收藏  举报