zoukankan      html  css  js  c++  java
  • Android service通信

    Android中的service通信可以通过context.bildService()方法,获取service实例来对其进行访问,具体做法如下;

    首先在Activity内部实现ServiceConnection

    private ServiceConnection conn=new ServiceConnection(){
    
    		@Override
    		public void onServiceConnected(ComponentName name, IBinder service) {
    			mservice = ((MyService.MyBinder)service).getService();
    			//得到了服务类对象就可以使用服务对象提供的方法了。但不可以在onCreate()方法里使用此对象,因为还没有初始化。
    			
    			mservice.dealData();
    			Log.e("SERVICE", "connection success");
    			Toast.makeText(ServiceDeamoActivity.this, "connection success", Toast.LENGTH_LONG).show();
    		}
    
    		@Override
    		public void onServiceDisconnected(ComponentName name) {
    			mservice=null;
    			Log.e("SERVICE", "discon");
    			Toast.makeText(ServiceDeamoActivity.this, "connection failure", Toast.LENGTH_LONG).show();
    		}
        };
    

     onCreate()

    bindService(new Intent(TaskService.ACTION_SERVICE),mConnection, Context.BIND_AUTO_CREATE);

    MyService类;

    public class MyService extends Service {
    
    	private Binder mbinder = new MyBinder();
    	
    	@Override
    	public IBinder onBind(Intent intent) {	
    		Toast.makeText(MyService.this, "onBind......", Toast.LENGTH_LONG).show();
    		return mbinder;
    	}
    	
    	class MyBinder extends Binder{
            public MyService getService(){
                return MyService.this;
            }
    	}
    	
    	void dealData(){
    		Log.e("msg", "service deal");
    	}
    		
    }
    

    2,使用实现接口的service

    public class MyService extends Service {
    
    	private IBinder buider=new MyBinder();
    	
    	@Override
    	public IBinder onBind(Intent intent) {
    		return buider;
    	}
    
    	public String query(){
    		return "hello connection";
    	}
    	
    	private class MyBinder extends Binder implements IStudent{
    
    		@Override
    		public String queryStudent() {
    			return query();
    		}
    	}
    }
    

    接口IStudent类

    public interface IStudent {
    	String queryStudent();
    }
    


    3,通过Messenger发送消息实现

    public class ServiceMessage extends Service{
    	public  final static int  MSG_HELLO=1;
    	// Handler实现消息的处理
    	 class MyHandler extends Handler{
    		public void handleMessage(Message msg) {
    			switch(msg.what)
    			{
    			case  MSG_HELLO:
    				Toast.makeText(getApplicationContext(), "get the messag", 1000).show();
    				break;
    			default:
    				Toast.makeText(getApplicationContext(), "default  messag", 1000).show();
    				break;
    			}
    		}
    	 }
    	 //创建Messenger类,与Handler绑定
    	 private final Messenger  myMessager = new Messenger (new MyHandler());
    	//绑定
    	public IBinder onBind(Intent arg0) {
    		Toast.makeText(getApplicationContext(), "onBind", Toast.LENGTH_SHORT).show();
    		return myMessager.getBinder();
    	}
    	
    }
    

    ServiceConnection建立连接

     private ServiceConnection connection=new ServiceConnection(){
        
    		public void onServiceConnected(ComponentName name, IBinder service) {
    			
    			Toast.makeText(mContext, "onServiceConnected ", 1000).show();
    			messenger=new Messenger(service);
    		}
    		public void onServiceDisconnected(ComponentName name) {
    			
    			messenger=null;
    		}
        };
    

     发送消息,这是一种通过发送不同的消息来对事件进行相应的处理。

    Message msg=Message.obtain(null, ServiceMessage.MSG_HELLO, 0, 0);
    			try {
    				messenger.send(msg);
    			} catch (RemoteException e) {
    				e.printStackTrace();
    			}
    

    4,利用service生命周期,通过调用startService(intent),在onStartCommand()内接收intent不同参数执行不同命令

    在此方法内可以通过获取不同的action来执行不同的方法,

    @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
    		if(intent!=null){
    			if("action1".equals(intent.getAction())){}
    			else if("action2".equals(intent.getAction())){}
    			else{}
    		}
            return super.onStartCommand(intent, flags, startId);
        }
    

    方法四;使用内部广播机制。

  • 相关阅读:
    努力努力,我假期要练琴学css
    在遇到困难时我们都会想要是这一切不曾发生该多好,可现实并不以我们的意志为转移,我们所能做的就是去克服...
    寒假学习目标~
    平安夜&&圣诞节
    you are the ont that we would like to trust and ca...
    Happy New Year!PR升3啦!
    呵呵,Merry Christmas & Happy New Year!
    使用Rx Framework实现XAML中的物体拖动
    MVVM绑定多层级数据到TreeView并设置项目展开
    Entity framework中EntityFunctions.CreateDateTime方法的闰年闰月bug
  • 原文地址:https://www.cnblogs.com/happyxiaoyu02/p/6818983.html
Copyright © 2011-2022 走看看