返回顶部

收藏

Android Serivce 例子

更多

BindingService

public class BindingService extends Activity {    
    private static final String TAG = "BindingService";  

    // mService负责接收Service传过来的对象  
    LocalService mService;  

    boolean mBound = false;  

    Button bindBtn;  

    @Override    
    public void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);    
        setContentView(R.layout.main);  
        bindBtn = (Button) findViewById(R.id.bindBtn);    
        bindBtn.setOnClickListener(new OnClickListener(){  

                @Override                 
                public void onClick(View v) {  
                Log.i(TAG, "OnClick....");  

                if(mBound) {  
                    int num = mService.getRandomNumber();  
                    Toast.makeText(BindingService.this, num+"", Toast.LENGTH_LONG).show();  
                }  

            }  
        });  
    }  

    @Override    
    protected void onStart() {  
        super.onStart();  
        // Bind to LocalService  
        Intent intent = new Intent(this, LocalService.class);  
        Log.i(TAG, "onStart.....onBind");  
        bindService(intent, mConnection, Service.BIND_AUTO_CREATE);  
    }  

    @Override    
    protected void onStop() {     
        super.onStop();           
        // UnBind from the service            
        if(mBound) {
            unbindService(mConnection);  
            mBound = false; 
        }  
    }  

    //Defines callbacks for service binding, passed to bindService()  

    private ServiceConnection mConnection = new ServiceConnection() {     
        @Override     
        // 在Service断开的时候调用这个函数        
        public void onServiceDisconnected(ComponentName name) {       
            // 另外说明在这里打log或者是使用Toast都不能显示,不知道是怎么回事        
            mBound = false;       
        }  

        @Override    
        // 在Service连接以后调用这个函数    
        public void onServiceConnected(ComponentName name, IBinder service) {         
            // we have bound to LocalService, cast the IBinder and get LocalService instance          
            // 获得Service中的Binder对象            
            // 另外说明在这里打log或者是使用Toast都不能显示,不知道是怎么回事            
            LocalBinder binder = (LocalBinder) service;           
            // 通过Binder对象获得Service对象,然后初始化mService            
            mService = binder.getService();           
            Log.i(TAG, "onServiceConnected.....");            
            System.out.println("onServiceConnected.....");            
            mBound = true;            
        }  

        };  

    }  

LocalService

public class LocalService extends Service {  
    // Binder given to clients  
    // 返回一个Binder对象  
    private final IBinder mBinder = new LocalBinder();  

    // Random number generator  
    private final Random mGenerator = new Random();  

    /***  
     * Class used for the client Binder.Because we know this service always  
     * runs in the same process as its clients  
     */       
    public class LocalBinder extends Binder {    
        LocalService getService() {    
            // return this instance of LocalService so clients can call public method    
            return LocalService.this;    
        }    
    }  

    @Override    
    // 如果是通过startService()函数启动的时候,这个函数是不起作用的。   
    // public void onServiceConnected(ComponentName name, IBinder service) 返回的Activity    
    // IBinder service 对象    
    public IBinder onBind(Intent intent) {    
    // IBinder通信关键是利用Activity中的IBider对象获得service对象,然后调用service中的函数    
    // 传给Activity一个Binder对象,通过这个Binder对象调用getService()获得Service对象    
    return mBinder;    
    }  

    // method for clients    
    public int getRandomNumber() {    
    return mGenerator.nextInt(100);    
    }  

} 

标签:java,Android,Service

收藏

0人收藏

支持

0

反对

0

发表评论