设为首页 加入收藏

TOP

Android_实用技术(3)—— Service简析(Ⅱ)(二)
2017-10-13 09:42:49 】 浏览:4022
Tags:Android_ 实用技术 Service 简析
ew
Intent(this, MyService.class); // STOP 服务 --> onDestroy()         stopService(stopIntent);         break;       case R.id.bind_service: // 绑定 --> ?         Intent bindIntent = new Intent(this, MyService.class);         bindService(bindIntent, connection, BIND_AUTO_CREATE);         break;       case R.id.unbind_service: // 解绑 --> ?         unbindService(connection);         break;       default:         break;     }   } }

  (4)我们一起来看一下bindService(bindIntent, connection, BIND_AUTO_CREATE)这个方法:

  bindService接收了3个参数:

    bindIntent:这个参数传入的就是我们的intent,目的就是调用MyService这个服务。

    connection:这个参数传入的就是创建好的ServiceConnection的实例,这个参数代表着我们的Activity是要和Service绑定在一起的!

    BIND_AUTO_CREATE:这是一个FLAG,表示在活动和服务进行绑定后自动创建服务。注意!注意!是自动创建服务,也就是说MyService会执行onCreate()方法,但是不会执行onStartCommand()方法!

  (5)好了,说到这边,我们直接来看看代码最终的效果吧:

                                                                                     

                       

  小编通过排列组合,对按钮进行了狂烈的点击,跟大家一起分享一下上图中Log的情况,分3种情况:

  (1)START SERVICE + STOP SERVICE:

    当我们先点击START SERVICE:此时服务启动,调用onCreat()和onStartCommand()方法;

    当我们后点击STOP SERVICE:此时,服务被销毁,调用onDestroy()方法。

  (2)BIND SERVICE + UNBIND SERVICE:

    当我们先点击BIND SERVICE:此时服务仅仅是创建,并未启动!所以调用的只是onCreate()方法。此时Activity与Service绑定,会同时调用onBind()方法,此时onServiceConnected()方法会被执行,还记的onBind()方法的返回类型不?我们通过Log可以很明显发现,Activity调用了服务内部的两个自定义方法。

    当我们后点击UNBIND SERVICE:由于服务还未启动,而BIND SERVICE只是将服务创建好并与活动进行绑定,那么解绑后,势必会销毁这个Service,所以onDestroy()被执行!

  (3)START SERVICE + BIND SERVICE + UNBIND SERVICE + STOP SERVICE

    这么长的一串字符,小编看的都想吐~~~~

    分析吧:

    1、我们先点击START SERVICE:onCreat()和onStartCommand()方法被执行,这个就不用多说了;

    2、然后点击UNBIND SERVICE:这个时候其实活动已经在后台运行了,我们此时将活动和服务绑定,那么onCreate()不会再执行,只会执行onServiceConnected()方法,Log里面打出来看的很清楚。

    3、此时你如果手贱,想STOP SERVICE:那么恭喜你,毫无反应!为什么?因为你都没解绑,你怎么销毁?

    4、OK,那我们先解绑,我们点击UNBIND SERVICE:此时一个奇怪的现象发生了,LOG日志没有打印出Destroy()这个方法啊?没有被执行啊!不是说bind了Service之后,unbind就会销毁这个服务吗?这跟我们第(2)条不符合啊。

    5、好吧,我们来看看,其实原因很简单:我们先start了Service,那么此时服务已经在后台运行了,这个时候你bind,让Service和Activity绑定,其实是没有什么意义的。但是既然绑定了,你如果不解绑,那么Destroy()毫无用武,所以,这种情况和(2)中分析的还是有区别的,此是解绑完后,服务还是舒舒服服的在后台运行,所以,要想干掉这个服务,你必须要STOP SERVICE。

    我想你是不是要好好消化一下,很快就可以理解的!

    6、放我们解绑后,再STOP SERVICE:这个时候Service就被枪毙了!

----------------------------------------------------------------------------------------------------------------------------------------

【后记】

  可能小编编写的帖子过于简单,也过于基础了,但是小编始终相信,掌握好基础是相当重要的,再简单的知识点也能看出大门道!希望各位Android大神不要嫌弃鄙视啊。

  如果你喜欢,请帮我点个赞,或者可以留言我们一起交流学习,如果文章中有任何错误和解释不到位的,请批评指正!谢谢啦~

 

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇android TextView多行文本(超过3.. 下一篇Android Studio git 版本回退到最..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目