当前位置:操作系统 > 安卓/Android >>

Android学习之远程绑定调用service

[java]  
  
[java]  
最近今天在学习service控件,前面的后台service和绑定本地控件的service的很容易理解,几乎没遇到什么问题,但看到远程调用service的时候模仿书上的例题,结果发现竟然得不到想要的结果,把书上的例子源码弄进去,还是会有问题,于是经过好几天的自己摸索和网上参考一些资料,主要得到帮助的来自http://www.cnblogs.com/TerryBlog/archive/2010/08/24/1807605.html         http://ericchan2012.iteye.com/blog/1554197 这2个网址。接下来直接进入正题,对这几天对远程绑定调用service的学习结果。  
 
 
远程绑定调用service主要是用来不同进程的信息共享。就比如服务器和客户端,在服务器端设置好一个service提供方法或信息,然后客户端可以直接调用服务器端service提供方法或信息。这里有个前提是客户端必须有和服务器端一份一样的AIDL,然后服务器端在客户端使用的系统上有注册过(也就是安装运行过一次),之后客户端就可以远程绑定调用服务器端的service了。
 
具体的步骤如下:
1.首先,是服务器的
  1)创建一个android应用工程  
   
  2)  在主Aitivity所在的包里新建个AIDL文件,这是ADT会自动帮你在gen目录下生成一个和AIDL文件同名的JAVA文件(这里的AidlService.java是下一步骤生成的,这里可以先忽略)
  
  3)如上图所示,创建一个用来使用service的类(AidlService.java)
  具体每个文件的代码如下:
  AidlServerActivity.java
 
[java]  
package com.ds.server;  
  
import android.app.Activity;  
import android.content.Intent;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.Toast;  
  
public class AidlServerActivity extends Activity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        Button bt = (Button) findViewById(R.id.bt);  
        bt.setOnClickListener(new OnClickListener() {  
  
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                Intent service = new Intent(AidlServerActivity.this,  
                        AidlService.class);  
                startService(service);  
                Toast.makeText(AidlServerActivity.this, "service started",  
                        Toast.LENGTH_LONG).show();  
            }     
  
        });    
  
    }  
}  
 
 
IAidlService.aidl
[java]  
package com.ds.server;  
inte易做图ce IAidlService {    
    int getType();   
}    
 
 AidlService.java
[java] 
package com.ds.server;  
  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.os.RemoteException;  
import android.util.Log;  
  
public class AidlService extends Service {  
    private boolean unrunnable;  
    private int count;  
  
    private class MyBinder extends IAidlService.Stub {  
  
        @Override  
        public int getType() throws RemoteException {  
            // TODO Auto-generated method stub  
            return 100;  
        }  
    }  
    private void Log(String str) {   
        Log.d("AidlService", "------ " + str + "------");  
    }  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        /* 
        new Thread(new Runnable(){ 
            @Override 
            public void run(){ 
                while(!unrunnable){ 
                    try{ 
                        Thread.sleep(1000); 
                    }catch(InterruptedException e){ 
                    } 
                    count++; 
                    Log.v("AidlService","count:"+count); 
                }        
            } 
        }).start(); 
        */  
        Log.v("RemoteCountService","onCreate");  
        Log("service create");  
          
    }  
/* 
    @Override 
    public void onStart(Intent intent, int startId) { 
        Log("service start id=" + startId); 
    } 
*/  
    @Override  
    public IBinder onBind(Intent t) {  
        Log("service on bind");  
        return new MyBinder();  
    }  
  
    @Override  
    public void onDestroy() {  
        Log("service on destroy");  
        unrunnable=true;  
        super.onDestroy();  
    }  
 
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,