简述

简述Android Thread

2017-12-14  本文已影响0人  萌码象C

目录:
[TOC]

线程

        public class IntentServiceTest extends IntentService {
            
            public IntentServiceTest() {   
                super("IntentServiceTest");   
            }  
            
            @Override
            public IBinder onBind(Intent intent)
            {
                return null;
            }
            
            @Override
            public void onCreate()
            {
                super.onCreate();
            }

            @Override
            public int onStartCommand(Intent intent, int flags, int startId)
            {
                return super.onStartCommand(intent, flags, startId);
            }
            
            @Override
            protected void onHandleIntent(Intent intent)
            {
                try {
                    //耗时操作
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            
            @Override
            public void onDestroy()
            {
                super.onDestroy();
            }
        }
        
        // 启动的IntentService
        Intent intent = new Intent(this, IntentServiceTest.class);   
        startService(intent); 
        startService(intent); 
        startService(intent); 
    
    
* 方法五:实现HandlerThread
    HandlerThread继承Thread,是一种可以使用Handler的Thread,通过run方法中Looper.prepare()来创建消息队列,并通过Looper.loop()来开启消息循环。  
    由于HandlerThread的run方法是一个无限循环,在不使用时,需通过quit或者quitSafely方法来终止线程执行。
    
        public class HandlerThreadActivity extends Activity {  
            
            private static final int SIGN = 1;
        
            private HandlerThread mHandlerThread;
            private Handler mMsgHandler;
            private boolean isContinue;

            @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_threadHandler);
        
                //创建后台线程
                initThread();
            }

            @Override
            protected void onResume()
            {
                super.onResume();
                //继续
                isContinue = true;
                mMsgHandler.sendEmptyMessage(SIGN);
            }

            @Override
            protected void onPause()
            {
                super.onPause();
                //停止继续
                isContinue = false;
                mMsgHandler.removeMessages(MSG_UPDATE_INFO);
            }

            private void initThread()
            {
                mHandlerThread = new HandlerThread("handlerThread");
                mHandlerThread.start();
                mMsgHandler = new Handler(mCheckMsgThread.getLooper())
                {
                    @Override
                    public void handleMessage(Message msg)
                    {
                        try {//模拟请求
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        
                        if (isContinue) {
                            mMsgHandler.sendEmptyMessageDelayed(SIGN, 1000);
                        }
                    }
                };
            }

            @Override
            protected void onDestroy()
            {
                super.onDestroy();
                //释放资源
                mHandlerThread.quit();
            }
        }

琐机制

Looper、Handler、MessageQueue、Message

操作多线程的方式

  1. Handler + Thread
  2. AsyncTask
  3. ThreadPoolExecutor
  4. IntentService

子线程更新UI的方式

  1. View.post(Runnable action)
  2. Activity.runOnUiThread(Runnable action)
  3. AsyncTask
  4. Handler

线程池

上一篇下一篇

猜你喜欢

热点阅读