Android之Service

service :一直在后台运行!

创建:

1.创建一个继承service的子类!

2.在Androidmainfest.xml中进行配置!

启动方式(两种):

1.Context.startService(new Intent());

    1) 通过该方法启动的service,service与访问者没有关联!即使访问者退出,service仍然可以运行!所以service不能与访问者进行数据交互

停止方法:

Context.stopService(new Intent());

2.Context.bindService(new Intet(),Serviceconnection con,int flags);

    con :该对象中有两个方法需要重写

        onServiceConnected(ComponentName name,IBinder binder){

          // 该方法当访问者与Service绑定成功时回调!onBind()方法中返回的IBinder对象就是binder,这样就实现了service与访问者之间数据的交互!

        } 

        onServiceDisconnected(ComponentName name){

          // 该方法当程序异常,或者其他原因导致的访问者与service断开连接回调!   如果是调用unbindService()方法来停止服务 不回调!

        }

    2) 通过该方法启动的service,service与访问者进行绑定!如果绑定的访问者退出,停止service! 因此可以与访问者进行数据交互!

停止方法:

Context.unbindService(new Intent());

生命周期:

service的生命周期与之启动方式不同而略有不同!

1.使用startService():onCreate()  -->  onStartconmmand() --> onDestroy()

2.使用bindService() : onCreate()  -->  onBind()  --> onUnbind()  --> onDestroy()

onCreate() :第一次创建service时~!执行”一“次!

onStartconmmand(): 每次执行startService()时,回调!

onDestroy(): 执行stopService()方法停止服务时,回调!

onBind() :service子类必须实现的方法!该方法返回一个Ibinder对象!通过该方法程序可以与service进行通信!

onUnbind() :当与该service绑定的客户端都断开连接时回调!

IntentService :

IntentService不是普通的Service,他是Service的子类,对Service进行了增强!

Service不足:

1.Service不会单独启用一个线程,他和他的应用在同一个线程中!

2.Service 因为他不是在一条新线程中,所以不能执行耗时任务!

IntentService 与之相反!

继承IntentService的子类重写一个方法即可:

onHandlerIntent(Intent intent){

}

时间: 2024-10-09 23:21:53

Android之Service的相关文章

android 远程Service以及AIDL的跨进程通信

在Android中,Service是运行在主线程中的,如果在Service中处理一些耗时的操作,就会导致程序出现ANR. 但如果将本地的Service转换成一个远程的Service,就不会出现这样的问题了. 转换成远程Service非常简单,只需要在注册Service的时候将他的android:process的属性制定成 :remote就可以了. 重新运行项目,你会发现,不会出现ANR了. 为什么将MyService转换成远程Service后就不会导致程序ANR了呢?这是由于,使用了远程Serv

android的Service的实例

package com.android.service; import android.app.IntentService;import android.content.Intent; public class HelloIntentService extends IntentService{ public HelloIntentService() {        super("HelloIntentService");        // TODO Auto-generated c

(六)Android中Service通信

一.启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected; import android.app.Activity;import android.content.Intent;import android.os.Bundle

Android 测试Service的生命周期

1 package com.example.myapp4; 2 3 import android.support.v7.app.ActionBarActivity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.Menu; 7 import android.view.MenuItem; 8 import android.view.View; 9 import android.w

Android之Service通信-(2)

一.Service通过IBinder与Activity进行通信 在Service中进行下载 Service package chuiyuan.lsj.androidjava.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.util.Log; import android.wi

Android——判断Service是否已经启动

延续百度地图定位的Demo,采用Service来进行百度定位,并且将数据上传到服务器上遇到了一个问题:在真机中使用清理内存来关闭程序的之后,Service会被关闭,但是过几秒中,它又会自动重启:重启就算了,而且再次登陆系统的时候,又会开启一个一样的服务,在LogCat中就会看到每次都获取到两次的定位数据.然后想想是否可以在建立Service之前判断这个服务有没有被创建?只要能做这个判断,那么服务存在我们就不管它,如果不存在则创建,本着这个思路,百度发现可行(Service后台服务创建时最好都要判

Android Web Service学习总结(一)

最近学习android平台调用webWebService,学习了一篇不错的博客(http://blog.csdn.net/lyq8479/article/details/6428288),可惜是2011年时的方法,而不适合现在android4.0之后的android版本,所以通过一番学习和研究,总结如下. web Service简介 通俗的理解:通过使用WebService,我们能够像调用本地方法一样去调用远程服务器上的方法.我们并不需要关心远程的那个方法是Java写的,还是PHP或C#写的:我

如何从python代码中直接访问Android的Service

在Kivy中,通过pyjnius扩展可以间接调用Java代码,而pyjnius利用的是Java的反射机制.但是在Python对象和Java对象中转来转去总让人感觉到十分别扭.好在android提供了binder这个进程间通信的功能,Java中的Service也是基于Binder的C++代码封装来实现进程间通信的,这也为从Python代码中绕开pyjnius直接访问Java代码提供了可能,既然Java的Service是基于C++的封装来实现的,也同样可以在Python中封装同样的C++代码,这篇文

【Android】Android中Service类onStartCommand的返回值有关问题(转)

@Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("---------->>onStartCommand2"); return super.onStartCommand(intent, flags, startId); } Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象

Android中Service的使用

我个人的理解是:我们平时使用的android系统的app的后台应用,就是这个原理 可以利用Service实现程序在后台运行,依照这个原理,可以通过Service来实现关键代码的运行与实现. <一>下面大体说一下我在极客学院跟着视频做的一个Service的小实现 1,首先点击左上角file->new往下拉,看到一个Service,创建MyService.java 这个就是我们的Service服务. 后续可以在这其中添加想要在后台运行的关键代码等. 2,首先创建项目后,在layout或中的x