android Activity綁定Service


activity可以綁定Service,並且可以調用Service中定義的方法

 

Service代碼:在里面多了一個IBinder;個人理解是用來與Activity綁定的主要通道;

public class MainServer extends Service {

    private final String TAG = "Service------->";

    private final IBinder binder = new MyBinder();        //綁定器

    public class MyBinder extends Binder {
        public MainServer getService() {
            return MainServer.this;    //返回本服務    
        }
    }

    /** 綁定時執行 */
    @Override
    public IBinder onBind(Intent intent) {
        Log.i(TAG, "onBind()");
        return binder;
    }

    /** 只在創建時執行一次 */
    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate()");
    }

    /** 斷開綁定或者停止服務時執行 */
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy()");
    }

    /** 當內存不夠是執行該方法 */
    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.i(TAG, "onLowMemory()");
        onDestroy();

    }

    /** 當從新綁定是執行 */
    @Override
    public void onRebind(Intent intent) {
        // TODO Auto-generated method stub
        super.onRebind(intent);
        Log.i(TAG, "onRebind()");
    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);
        Log.i(TAG, "onStart()");
    }

    /** 每次執行Service都會執行該方法 */
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand --->flags = " + flags + "     startId = " + startId);
        con = new Connect();
        con.start();

        return super.onStartCommand(intent, flags, startId);
    }

    /** 斷開綁定是執行 */
    @Override
    public boolean onUnbind(Intent intent) {
        Log.i(TAG, "onUnbind()");
        return super.onUnbind(intent);
    }
            


 

MainActivity代碼:  必須聲明實例ServiceConnection,並且在綁定成功后獲取到Service,用以調用Service的方法

public class MainActivity extends Activity {
    
    private MainServer mainService;
    //綁定Service監聽
    ServiceConnection sconnection = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.i("activity---->", "已斷開Service");
        }
        /**當綁定時執行*/
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // TODO Auto-generated method stub
            Log.i("activity---->", "已綁定到Service");
            mainService = ((MainServer.MyBinder)service).getService();
            Intent i = new Intent();
            mainService.onStartCommand(i, 0, 0);        //綁定成功后可以調用Service方法,此處等與是啟動Service
        }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button start = (Button)findViewById(R.id.start);
        Button stop = (Button)findViewById(R.id.stop);
        Button send = (Button)findViewById(R.id.send);
        Button skip = (Button)findViewById(R.id.skip);
        
        start.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent bind = new Intent(MainActivity.this,MainServer.class);
                bindService(bind, sconnection, Context.BIND_AUTO_CREATE);
                
            }
        });
        stop.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                unbindService(sconnection);
            }
        });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM