zoukankan      html  css  js  c++  java
  • start方式开启服务的特点&bindService 方式开启服务的特点

      服务是在后台运行 可以理解成是没有界面的activity
      定义四大组件的方式都是一样的  
      定义一个类继承Service
     
      start方式开启服务的特点
      特点:
      (1)服务通过startservice方式开启 第一次点击按钮开启服务 会执行服务的onCreate 和 onStart方法
      (2)如果第二次开始在点击按钮开启服务 服务之后执行onStrat方法
      (3)服务被开启后 会在设置页面里面的 running里面找得到这个服务 
      ***(4)startservice 方式开启服务 服务就会在后台长期运行 直到用户手工停止 或者调用StopService方法 服务才会被销毁
     
     bindService 方式开启服务的特点
     (1)当点击按钮第一次开启服务 会执行服务的onCreate方法 和 onBind()方法
     (2) 当我第二次点击按钮在调用bindservice  服务没有响应 
     **(3) 当activity销毁的时候服务也销毁  不求同时生但求同时死 
     (4)通过bind方式开启服务  服务不能再设置页面里面找到  相当于是一个隐形的服务
     (5)bindservice不能多次解绑 多次解绑会报错
     
    为什么要引入bindService
    目的为了调用服务里面的方法
     
    /**
     * 定义服务  需要在清单文件里面配置
     * @author 
     *
     */
    public class FirstService extends Service {
    
        @Override
        public IBinder onBind(Intent intent) {
            
            System.out.println("onBind");
            return null;
        }
    
        //当服务第一次被开启的时候调用
        @Override
        public void onCreate() {
            System.out.println("onCreate");
            super.onCreate();
        }
        
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            System.out.println("onStartCommand");
            return super.onStartCommand(intent, flags, startId);
        }
        
        //服务销毁的时候执行
        @Override
        public void onDestroy() {
            System.out.println("onDestroy");
            super.onDestroy();
        }
        
    }
    /**
     * activity 你大爷 是 服务
     * 
     * @author 
     * 
     */
    public class MainActivity extends Activity {
    
        private MyConn conn;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
        }
    
        // 点击按钮开启服务
        public void click1(View v) {
    
            Intent intent = new Intent(this, FirstService.class);
            // 开启服务
            startService(intent);
    
        }
    
        // 点击按钮停止服务
        public void click2(View v) {
            Intent intent = new Intent(this, FirstService.class);
            stopService(intent);
        }
    
        // 点击按钮通过 bindservice 方式去开启服务
        public void click3(View v) {
            Intent intent = new Intent(this,FirstService.class);
            
            //连接到服务FirstService 
            
             conn = new MyConn();
             System.out.println("bind----"+conn);
             bindService(intent,conn, BIND_AUTO_CREATE);
            
            
        }
    
        //点击按钮 取消绑定服务
        public void click4(View v) {
             System.out.println("unbind----"+conn);
            unbindService(conn);
        }
        
        //当activity销毁的时候调用
        @Override
        protected void onDestroy() {
            //当activity销毁的时候  取消绑定服务
            unbindService(conn);
            
            super.onDestroy();
        }
        
        
        
        
        //用来监听服务的状态
        private class MyConn implements ServiceConnection{
    
            //连接成功后调用
            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                
            }
    
            //失去连接调用
            @Override
            public void onServiceDisconnected(ComponentName name) {
                
            }
            
        }
        
    }

    AndroidManifest.xml

            <!--配置服务   -->
            
            <service android:name="com.itheima.service.FirstService">
            </service>
  • 相关阅读:
    通过user-agent判断h5页面是在哪个手机App(QQ、微信、支付宝)下打开的
    vscode格式化插件
    简单直接,“NODE_ENV”总结
    NativeScript又一个Hybrid技术(附与Weex,ReactNative比较)
    ReactNative开发中遇到的问题记录
    两个在线编辑网站runjs和jsbin
    go 如何单测
    go语法-type等
    go语法-结构体和接口-细节
    解决 Webstorm 每次更新 Git 代码都要输入密码的问题
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/5977370.html
Copyright © 2011-2022 走看看