android 使用binder实现Service与activity进行交互

来源:互联网 发布:打字排版软件下载 编辑:程序博客网 时间:2024/05/18 00:27

在activity需要与Service进行交互的时候,我们就要用到binder机制,具体实现如下:

定义一个Service:

public class MyService extends Service {    String msg;    public MyService() {        msg = "Msg from Service";    }    @Override    public IBinder onBind(Intent intent) {        return new MyBinder();    }    public class MyBinder extends Binder{        public String getMsg(){            return msg;        }    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        Log.i("Service","Service start");        return super.onStartCommand(intent, flags, startId);    }}

注意在manifest文件中配置好,另外,降低Service被系统杀死的几率请看 
Android应用进程防杀指南1-常用套路  
 

在activity中绑定Service:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Intent intent = new Intent(this, MyService.class);        startService(intent);        bindService(intent, sc, Context.BIND_AUTO_CREATE);    }    private ServiceConnection sc = new ServiceConnection() {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            MyService.MyBinder myBinder = (MyService.MyBinder) service;            Toast.makeText(MainActivity.this,myBinder.getMsg(),Toast.LENGTH_SHORT).show();        }        @Override        public void onServiceDisconnected(ComponentName name) {            // 连接出现了异常断开了,MyService被杀掉了            Toast.makeText(getApplicationContext(),"Service被解绑",Toast.LENGTH_SHORT).show();            Log.i("MainActivity","Service被解绑");        }    };    @Override    protected void onDestroy() {        super.onDestroy();        //退出记得解绑Service        unbindService(sc);    }}





原创粉丝点击