<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          android Service中多線程交互

          作者: 時間:2016-09-12 來源:網(wǎng)絡 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/201609/304411.htm

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

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

          如下是一個通過activity的oncreate()方法啟動服務,在服務里開啟子線程,并發(fā)消息給主線程來處理的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();

          }

          }



          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();