第8章 Service基础Activity与Service绑定

    要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。

    现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:

    A. 编写需要运行在后台的类继承自android.app.Service。

      public class MyService extends Service {

        //服务生命周期 创建,开始,销毁
         /**
            * 创建
          */
         @Override
       public void onCreate() {
        // TODO Auto-generated method stub
          super.onCreate();
          Log.d("info", "Service Create");
         }
         /*
            * 开始
            * (non-Javadoc)
            * @see android.app.Service#onStart(android.content.Intent, int)
          */
       @Override
         public void onStart(Intent intent, int startId) {
          // TODO Auto-generated method stub
            super.onStart(intent, startId);
            Log.d("info", "Service Start");
           }
           /**
                * 销毁 
            */
        @Override
          public void onDestroy() {
          // TODO Auto-generated method stub
            super.onDestroy();
            Log.d("info", "Service Destroy");
           }

 

           /**
              * 当Service与Activity成功绑定时调用这个方法(non-Javadoc)
            * @see android.app.Service#onBind(android.content.Intent)
            */
         @Override
           public IBinder onBind(Intent arg0) {
            Log.d("info","Service Bind Success");
            return null;
            }
           /**
              * 重新绑定
            */
         @Override
           public void onRebind(Intent intent) { 
              super.onRebind(intent);
            Log.d("info","Service ReBind Success");
           }
           /**
              * 取消绑定
            */
         @Override
           public boolean onUnbind(Intent intent) {
             Log.d("info","Service Unbind Success");
            return super.onUnbind(intent);
            }
       }

 

    B.  在AndroidManifest.xml中配置<service>标签

      <service android:name=".MyService" android:enabled="true" ></service>

 

    

    C. 绑定服务:

      (1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成

           由该方法的第二个参数可以确定第二步要做什么

      (2) 编写类实现ServiceConnection 接口

          class MyServiceConnection implements ServiceConnection
            {

            @Override
            public void onServiceConnected(ComponentName arg0, IBinder arg1) {
             Log.d("info", "Service Connection Success");
             //成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型

            }

            @Override
            public void onServiceDisconnected(ComponentName arg0) {
             // TODO Auto-generated method stub
             Log.d("info", "Service Connection Filed");
             //连接失败执行
            }
     
          }

        (3)使用

             class BtnClick implements OnClickListener
              {
              @Override
            public void onClick(View arg0) {
             Intent intent = new Intent(Main.this,MyService.class);   
             MyServiceConnection myServiceConnection = new MyServiceConnection();
             switch (arg0.getId()) {
               case R.id.btnStart:        
                  Main.this.startService(intent);
                  break;
               case R.id.btnStop:    
                  Main.this.stopService(intent);
                  break;
               case R.id.btnBind:
                   Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE);
                   break;  
               case R.id.btnUnBind:
                    //ServiceConnection必须是全局变量否则此处报错
                   Main.this.unbindService(myServiceConnection );
                    break;
               default:
                   break;
               }   
            }
     
            }

 

***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[react-router] React-Router 4的switch有什么用?

[react-router] React-Router 4的switch有什么用&#xff1f; Switch的 子组件只能是Route或者Switch组件&#xff0c;它的作用是匹配到下面的第一个路由组件&#xff0c;下面的路由组件就不再进行匹配展示了 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。…

linux_shell_根据网站来源分桶

应用场景&#xff1a; 3kw行url\thtml记录 【网站混合】 需要&#xff1a;按照网站来源分桶输出 执行shell cat */*pack.html|awk -F \t {split($1,arr,"/");sitearr[3];print $0 > site} 转载于:https://www.cnblogs.com/cphmvp/p/5139994.html

[react] 你知道Virtual DOM的工作原理吗?

[react] 你知道Virtual DOM的工作原理吗&#xff1f; Virtual DOM是什么&#xff1a;虚拟DOM是真实DOM的javascript对象的映射Virtual DOM的工作原理&#xff1a;数据驱动视图更新这个过程中&#xff0c;首先会改变虚拟DOM对象&#xff0c;一个视图的更新周期&#xff0c;首先…

C#正则表达式积累

感谢&#xff1a;侧身向南边 http://www.cnblogs.com/kissknife/archive/2008/03/23/1118423.html的分享给了自己学习的机会 -------------------------------------C#的正则表达式-------------------------------------------的作用&#xff1a;string x"D:\\My Huang…

如何利用业务时间提升自我

转载于:https://www.cnblogs.com/helloIT/articles/5140273.html

[react] react兄弟组件如何通信?

[react] react兄弟组件如何通信&#xff1f; 状态提升&#xff0c;通过父组件的state和方法传递到两个子组件 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

'800a0005' 图片上传出现写入文件失败的错误 -- 修改pload_5xsoft.inc

一、基本问题 一般是文件写入的路径不对&#xff0c;或者是目录的权限没有设置好&#xff08;必须对everyone或者来宾用户IIS_IUSRS设置为完全访问&#xff09; 二、特殊问题 1、错误提示&#xff1a; ADODB.Stream 错误 800a0bbc 写入文件失败。 /code/zhaosheng1/ADMIN/uplo…

AutoMapper用法一瞥

前段时候做个小项目用到了autoMapper&#xff08;参考了NOP里的用法&#xff09;&#xff0c;感觉还行&#xff0c;用起来挺方便的。首先复杂的东西我就不说了&#xff0c;至于详细的教程我也就不写了&#xff0c;比较园子里有很多这样的文章&#xff0c;我就分享下&#xff0c…

ping得通外网,上得了QQ,游戏,却打不开网页。

操作系统&#xff1a;win7_64bit 下午帮我小艾优化电脑&#xff0c;不知道把什么插件给卸载了。 她回来以上就上不了网&#xff0c;我首先ping网关&#xff0c;DNS&#xff0c;外网&#xff0c;都通。 登QQ正常。 我的思路&#xff1a; 先把Socket套字结相关的卸载掉就是&#…

WebGIS中一种根据网格索引判断点面关系的方法

文章版权由作者李晓晖和博客园共有&#xff0c;若转载请于明显处标明出处&#xff1a;http://www.cnblogs.com/naaoveGIS/。 1.背景 判断点面关系的算法有很多&#xff0c;在我之前的博文中有一篇专门对其进行了描述&#xff1a;判断点是否落在面中的Oracle存储过程描述。其中提…

[react] 怎样在react中创建一个事件?

[react] 怎样在react中创建一个事件&#xff1f; var EventEmitter require(events).EventEmitter; class App extends Component{ constructor(props){ super(props); } componentDidMount(){ this.itemChange emitter.addListener(ItemChange, (msg,data)>console.log(…

重写Checkbox 改写选择框的大小

/* 作者&#xff1a;Starts_2000* 日期&#xff1a;2009-07-30* 网站&#xff1a;http://www.csharpwin.com CS 程序员之窗。* 你可以免费使用或修改以下代码&#xff0c;但请保留版权信息。* 具体请查看 CS程序员之窗开源协议&#xff08;http://www.csharpwin.com/csol.html&…

HDU4349--Xiao Ming's Hope(数论)

输入一个n(1<n<108)&#xff0c;求C(n,0),C(n,1),C(n,2)...C(n,n)有多少个奇数。 Lacus定理 http://blog.csdn.net/acm_cxlove/article/details/7844973 A、B是非负整数&#xff0c;p是质数。AB写成p进制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。…

[react] react中可以在render访问refs吗?为什么?

[react] react中可以在render访问refs吗&#xff1f;为什么&#xff1f; <><span id"name" ref{this.spanRef}>{this.state.title}</span><span >{this.spanRef.current ? 有值 : 无值}</span></> 不可以&#xff0c;render …

JS splice()方法

splice() 方法用于插入、删除或替换数组的元素。 语法 arrayObject.splice(index,howmany,element1,.....,elementX) 参数 描述 index 必需。规定从何处添加/删除元素。 该参数是开始插入和&#xff08;或&#xff09;删除的数组元素的下标&#xff0c;必须是数字。 howmany…

为什么每天感觉没精神

有些朋友会总是感觉没有精神&#xff0c;整天困得睁不开眼&#xff0c;干什么都没有劲儿&#xff0c;休息又睡不好&#xff0c;该怎么办呢&#xff1f;早睡早起。虽然都是每天睡8小时&#xff0c;但是早睡早起的人明显比晚睡晚起的人充满了正能量。要相信大自然的力量&#xff…

[react-router] React-Router怎么获取历史对象?

[react-router] React-Router怎么获取历史对象&#xff1f; 1.如果React > 16.8 时可以使用 React Router中提供的Hooksimport { useHistory } from "react-router-dom";let history useHistory(); 2.使用this.props.history获取历史对象let history this.pr…

为Ubuntu Server 安装图形桌面环境

From: http://www.oschina.net/question/12_10835 第一步&#xff1a;安装桌面环境 首先需要确保您已经在/etc/apt/sources.list 文件中启用了Universe和Multiverse软件库&#xff0c;接下来执行如下命令&#xff1a; sudo apt-get update sudo apt-get install ubuntu-desk…

使用STM32的USB模块中后对USB缓冲区的认识

最近在使用STM32的USB模块开发个项目&#xff0c;还以为挺简单&#xff0c;结果搞了快两天才把USB的包缓冲区的访问搞定&#xff0c;在此做个小总结吧。 STM32的USB模块包缓冲区有512B&#xff0c;但是在STM32的参考手册中的存储器映像中却表明0x40006000-0x400063ff&#xff0…

md /mdd /ml /mt/mtd

From: http://www.cnblogs.com/eddyshn/archive/2009/11/23/1608823.html VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C 运行时库 库文件 Single thread(static link) ML libc.lib Debug single …