新聞中心

        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();

        }

        }



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 乌什县| 凤翔县| 内黄县| 辛集市| 桐梓县| 栾城县| 巴里| 石屏县| 抚顺市| 樟树市| 句容市| 宣威市| 哈巴河县| 岑溪市| 延庆县| 乌拉特后旗| 台东市| 万年县| 微博| 兰溪市| 安国市| 宁陕县| 乌拉特前旗| 和田市| 岳池县| 大厂| 石门县| 阿瓦提县| 南溪县| 太谷县| 垦利县| 镶黄旗| 广宁县| 阳新县| 德阳市| 宿州市| 五家渠市| 房山区| 南昌县| 茶陵县| 涞源县|