Android中Serivce初探

Android中的Service有两种启动方式

1,startSverice

2,bindService

这两种启动Service的方式略有不同。

首先看startService

Intent startIntent = new Intent(MainActivity.this,MyService.class);
startService(startIntent);

启动的方式基本是和启动一个Activity是一样的。都是通过Intent。接下来看一个Service的一般构造方式。

onCreate() ->  onStartCommand() -> onDestory()

这是一般情况的重要几种方法。

和Activity类似,在一个Service的生命周期。,onCreate()都是只调用一次的。然后onStarcommand()方法,startService几次,就会调用几次的

接下来看bindService

bindService稍微复杂一点。不过理清楚就好了。

启动方式 :

Intent bindIntent = new Intent(MainActivity.this,MyService.class);
bindService(bindIntent, connection,BIND_AUTO_CREATE);

一样是通过Intent启动,然后进行服务的绑定,其实就是在具体指定绑定哪一个服务了。

bindService的三个参数:启动哪个Service,connection 我个人的理解就是启动service以后返回的连接什么的,第三个参数是启动了Service自动调用create(0方法

用这种方式启动Service的话,需要实现onBind()方法,返回一个绑定的内容。随后这个内容传递给onServiceConnected方法里,获得这个内容。调用绑定方法中的方法。

写的不是很清晰。

销毁Service

如果同时startService以及bindService的话。那么需要stopService和unBindService

线程和Service。

一个Activity启动的Service 两个的线程ID是相同的。

那么这样会有ANR主线程阻塞吗?

不会。 用Service的好处就是即使主线程被KILL了。这个Service还是存在的。即使activity已经被finishi()。也没有关闭Service。

遇到一个问题,当绑定好Service以后,关闭了Activity,再取消绑定,会报错,找不到取消的Service。这个意思应该是。

一个Activity重新启动后,没有记得之前绑定的Service,然后取消绑定的Service,所以就Null了。

用Service的好处。

因为Service不会因为Activity的关闭而关闭,因此如果activity被finish后,也可以重新绑定Service来获得相应的内容。

那么为什么不在Activity里直接启动一个线程来进行操作呢。因为finishi以后,这个线程就控制不了了。并且其他的activity也访问不到这个线程的。

在service里就可以哦

那么看一下service里面启动子线程的方式

  1. public int onStartCommand(Intent intent, int flags, int startId) {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. // 开始执行后台任务
  6. }
  7. }).start();
  8. return super.onStartCommand(intent, flags, startId);
  9. }
  10. class MyBinder extends Binder {
  11. public void startDownload() {
  12. new Thread(new Runnable() {
  13. @Override
  14. public void run() {
  15. // 执行具体的下载任务
  16. }
  17. }).start();
  18. }
  19. }
时间: 2024-10-27 13:25:26

Android中Serivce初探的相关文章

Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明

本文原创 ,转载必须注明出处 :http://blog.csdn.net/qinjuning 今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与 scrollBy这两个函数的区别 . 首先 ,我们必须明白在Android View视图是没有边界的,Canvas是没有边界的,只不过我们通过绘制特定的View时对 Canvas对象进行了一定的操作,例如 : translate(平移).clipRect(剪切)等,以便达到我们的

Android中的MVP架构初探

说来惭愧,MVP的架构模式已经在Android领域出现一两年了,但是到今天自己才开始Android领域中的MVP架构征程.闲话不多说,开始吧! 一.架构演变概述 我记得我找第一份工作时,面试官问我"android是否属于MVC架构模式,简述一下".确实,Android的整体设计结构就是MVC的设计模式,在J2EE的开发中,使用的也是MVC模式,MVC模式是一个经典,经历了几十年的考验.Android项目中的MVC架构: View:是应用程序中处理数据显示的部分,对应于layout文件下

Android中Canvas绘图基础详解(附源码下载)

Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要传入要绘制的图形的坐标形状,还要传入一个画笔Paint.drawXXX方法以及传入其中的坐标决定了要绘制的图形的形状

Android之——JNI初探

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47405683 这里,我将用一个小例子的形式来帮助大家初探JNI的用法,首先,大家要先搭建好NDK环境,请大家先阅读<Android之--NDK环境搭建>一文. 一.实现 这个小例子实现的功能就是,通过Android中的java代码来调用C代码实现java代码与C代码之间的交互. 1.布局文件 我们首先在布局文件activity_main.xml中,添加一个按钮控件,并给按钮控件

Android中ViewPager+Fragment懒加载问题解决方案

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878 本文出自[DylanAndroid的博客] Android中ViewPager+Fragment懒加载问题解决方案 在Android中我们经常会用到ViewPager+Fragment组合.然而,有一个很让人头疼的问题就是,我们去加载数据的时候 由于ViewPager的内部机制所限制,所以它会默认至少预加载一个.这让人很郁闷,所以,我就想到要封装一个Fragme

Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PARENT/FILL_PARENT属性的原理说明 xml布局文件解析成View树的流程分析. 希望对大家能有帮助.- - 分析版本基于Android 2.3 . 1.WRAP_CONTENT.MATCH_PARENT/FILL_PARENT 初入Android殿堂的同学们,对这三个属性一定又爱又恨.爱的是使

Android中Canvas绘图基础详解

原文:http://blog.csdn.net/iispring/article/details/49770651 Android中,如果我们想绘制复杂的自定义View或游戏,我们就需要熟悉绘图API.Android通过Canvas类暴露了很多drawXXX方法,我们可以通过这些方法绘制各种各样的图形.Canvas绘图有三个基本要素:Canvas.绘图坐标系以及Paint.Canvas是画布,我们通过Canvas的各种drawXXX方法将图形绘制到Canvas上面,在drawXXX方法中我们需要

【转】Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)>>中,我们 了解了View树的转换过程以及如何设置View的LayoutParams的.本文继续沿着既定轨迹继续未完成的job. 主要知识点如下:                 1.MeasureSpc类说明                 2.measure过程详解(揭秘其细节);   

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面