新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > android Service中多線程交互

        android Service中多線程交互

        作者: 時間:2016-09-12 來源:網絡 收藏

        android 的service和activity是運行在UI主線程的。在android線程中,只有主線程即UI線程有自己的默認的消息隊列。子線程需要創建自己的消息隊列,并把消息發給隊列,并循環起來,發給handler處理。

        本文引用地址:http://www.104case.com/article/201609/304411.htm

        1、Looper.prepare();給子線程創建消息隊列。

        2、Looper.loop();把消息放入消息隊列并循環起來。

        如下是一個通過activity的oncreate()方法啟動服務,在服務里開啟子線程,并發消息給主線程來處理的DEMO。

        3、MainActivity.java如下:

        @Override

        protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        startService(new Intent(MainActivity.this,ServiceTest.class));

        }

        4、ServiceTest.java

        public class ServiceTest extends Service {

        private Handler mHandler=new Handler(){

        @Override

        public void handleMessage(Message msg) {

        switch (msg.what) {

        case 1:

        new Thread(){

        @Override

        public void run() {

        Log.i(服務, 第2個線程);

        Looper.prepare();

        for(int i=10;i20;i++){

        Toast.makeText(getApplicationContext(), i+,0).show();

        try {

        //Thread.sleep(1000);

        } catch (Exception e) {

        // TODO: handle exception

        }

        }

        mHandler.sendEmptyMessage(2);

        Looper.loop();

        };

        }.start();

        break;

        case 2:

        new Thread(){

        @Override

        public void run() {

        Log.i(服務, 第3個線程);

        Looper.prepare();

        for(int i=20;i30;i++){

        Toast.makeText(getApplicationContext(), i+,0).show();

        try {

        //Thread.sleep(1000);

        } catch (Exception e) {

        // TODO: handle exception

        }

        }

        mHandler.sendEmptyMessage(3);

        Looper.loop();

        };

        }.start();

        break;

        case 3:

        onDestroy();

        break;

        default:

        break;

        }

        super.handleMessage(msg);

        }

        };

        public ServiceTest() {

        // TODO Auto-generated constructor stub

        }

        @Override

        public IBinder onBind(Intent intent) {

        // TODO Auto-generated method stub

        return null;

        }

        @Override

        public void onCreate() {

        Log.i(服務, onCreate());

        super.onCreate();

        new Thread(){

        @Override

        public void run() {

        Log.i(服務, 第一個線程);

        Looper.prepare();

        for(int i=0;i10;i++){

        Toast.makeText(getApplicationContext(), i+,0).show();

        try {

        //Thread.sleep(1000);

        } catch (Exception e) {

        // TODO: handle exception

        }

        }

        mHandler.sendEmptyMessage(1);

        Looper.loop();

        };

        }.start();

        }

        @Override

        public int onStartCommand(Intent intent, int flags, int startId) {

        Log.i(服務, onStartCommand);

        return super.onStartCommand(intent, flags, startId);

        }

        @Override

        public void onDestroy() {

        Log.i(服務, onDestroy());

        super.onDestroy();

        stopSelf();

        }

        }



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 临颍县| 扶绥县| 故城县| 响水县| 长汀县| 新乡市| 沾益县| 东乌珠穆沁旗| 黄梅县| 七台河市| 克什克腾旗| 桐庐县| 资阳市| 股票| 嘉黎县| 留坝县| 海安县| 三门峡市| 广州市| 瓮安县| 天柱县| 兴业县| 丘北县| 明溪县| 顺昌县| 高邑县| 称多县| 苍山县| 驻马店市| 白城市| 阳曲县| 县级市| 德阳市| 兴和县| 东港市| 郁南县| 沾益县| 鸡泽县| 广丰县| 天祝| 东海县|