zoukankan      html  css  js  c++  java
  • android开发之使用Messenger实现service与activity交互

    service与activity交互的方式有多种,这里说说使用Messenger来实现两者之间的交互。

    Service程序

    public class MessengerService extends Service {
    
        final Messenger mMessenger = new Messenger(new IncomingHandler());
        @Override
        public IBinder onBind(Intent intent) {
            return mMessenger.getBinder();
        }
    
        @SuppressLint("HandlerLeak")
        class IncomingHandler extends Handler {
    
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case 0:
                    Toast.makeText(MessengerService.this,"Hello lenve!", Toast.LENGTH_LONG).show();
                    break;
                case 1:
                    Toast.makeText(MessengerService.this,"Hello lenve!Hello world!", Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
                }
            }
    
        }
    }

    MainActivity.java

    public class MainActivity extends Activity {
    
        private Messenger mMessenger;
        private ServiceConnection conn;
        private Intent intent;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            intent = new Intent(this,MessengerService.class);
            conn = new ServiceConnection() {
    
                @Override
                public void onServiceDisconnected(ComponentName name) {
                    mMessenger = null;
                }
    
                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {
                    mMessenger = new Messenger(service);
                }
            };
        }
    
    
    
        @Override
        protected void onStart() {
            super.onStart();
            bindService(intent, conn, BIND_AUTO_CREATE);
        }
    
    
    
        @Override
        protected void onStop() {
            super.onStop();
            unbindService(conn);
        }
    
    
    
        public void onClick(View v){
            Message msg = null;
            switch (v.getId()) {
            case R.id.button1:
                msg = Message.obtain(null, 0, 0, 0);
                try {
                    mMessenger.send(msg);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
                break;
            case R.id.Button01:
                msg = Message.obtain(null, 1, 0, 0);
                try {
                    mMessenger.send(msg);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
                break;
            default:
                break;
            }
        }
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

  • 相关阅读:
    51nod 1621 花钱买车牌 优先队列
    最大字段和 51nod 1049 水水水水水水水水水水水水
    大数相乘 51nod 1027 水题
    逆序数 51nod 1019 归并 分治
    最长公共子序列 LCS 递归 dp 51Nod 1006
    vc6 字体设置
    自行车维护大全(zz)
    DirectX 9.0 3D游戏开发编程基础 [书评](zz)
    二维线段树
    latex 引用文献 bib
  • 原文地址:https://www.cnblogs.com/lenve/p/4770538.html
Copyright © 2011-2022 走看看