线程
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 中传递数据的问题!