• 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);
                }
            });
  • 相关阅读:
    Mtk Ft6306 touch 驱动 .
    第一屏不显示懒加载的图片内容,这个方法可以搞定
    C#多线程中访问winform控件 (解决Winform 对象当前正在其他地方使用)
    变化的科技感十足的网站,推荐
    新年有感
    获取高精度时间注意事项 (QueryPerformanceCounter , QueryPerformanceFrequency)
    修改 TeamViewer ID 的方法
    VS2017离线安装包[百度云盘](收藏了)
    老子今天不加班,程序员也需要自由
    改变Eclipse 中代码字体大小
  • 原文地址:https://www.cnblogs.com/suliang-com/p/5873049.html
Copyright © 2020-2023  润新知