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;
            }
        }
    }

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

  • 相关阅读:
    C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)
    "Isa"与"Hasa"
    Access、SQLite、HSQLDB、Sybase、MySQL、DB4O比较
    C#反射(二)
    跳出语句
    C#反射(一)
    返回集合使用IEnumerable<>还是IList<>
    理解C#值类型与引用类型
    WF4 Beta2 工作原理
    Interesting thing with WF4 Activity Scheduling
  • 原文地址:https://www.cnblogs.com/lenve/p/4770538.html
Copyright © 2011-2022 走看看