Android开发——关于Service的一些要点

标签: android 开发 service | 发表时间:2012-05-23 05:08 | 作者:tangwing
出处:http://blog.csdn.net
  • service 有两种调用形式:被启动(startService)和被绑定(bindService)。前者要求在Service类中实现onStartCommand方法,Service启动后需要手动停止,否则永远运行下去;后者要求实现onBind方法,当没有组件绑定到此Service时,它自行了断。
  • Service需要在manifest文件里声明。通过使用intent-filter可以使得其他程序启动这一Service。
  • 注意!Service在当前application所在的进程中运行,建议自行在Service中创建新线程来执行任务,否则有可能导致application出现“卡”的现象。直接使用  IntentService即可避免这一问题。它甚至已经实现一个任务队列来解决并发的问题。如果确实需要并发的功能则只能自行继承实现Service类了。
  •   onStartCommand()的返回值包括 START_NOT_STICKYSTART_STICKYSTART_REDELIVER_INTENT。详情用力点击相应链接。
  • 如果在用startService启动Service时希望Service返回一个结果,那么可以用  PendingIntent作为参数,利用broadcast获取返回值。

  • 当我们需要与Service进行交互或者希望把部分功能暴露给其他程序的时候,使用bindService。在Service中需实现onBind方法,返回一个IBinder接口,我们需要在此接口中定义一些方法,以便绑定Service的组件能够通过这些方法与Service进行交互。使用unBindService解除绑定。
  • Service可使用 Toast Notifications 或  Status Bar Notifications来通知用户一些信息。

  • 当一个Service的存在是用户能意识到的,如播放器,那么在启动service时使用  startForeground()。样例代码如下:
  • Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),System.currentTimeMillis());    
    Intent notificationIntent = new Intent(this, ExampleActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); notification.setLatestEventInfo(this, getText(R.string.notification_title), getText(R.string.notification_message), pendingIntent); startForeground(ONGOING_NOTIFICATION, notification);


  • 关于Service的生命周期:
    public class ExampleService extends Service {
        int mStartMode;       // indicates how to behave if the service is killed
        IBinder mBinder;      // interface for clients that bind
        boolean mAllowRebind; // indicates whether onRebind should be used
    
        @Override
        public void onCreate() {
            // The service is being created
        }
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            // The service is starting, due to a call to startService()
            return mStartMode;
        }
        @Override
        public IBinder onBind(Intent intent) {
            // A client is binding to the service with bindService()
            return mBinder;
        }
        @Override
        public boolean onUnbind(Intent intent) {
            // All clients have unbound with unbindService()
            return mAllowRebind;
        }
        @Override
        public void onRebind(Intent intent) {
            // A client is binding to the service with bindService(),
            // after onUnbind() has already been called
        }
        @Override
        public void onDestroy() {
            // The service is no longer used and is being destroyed
        }
    }

  • 与Activity不同的是,我们再重写时不需要调用这些方法的super实现

  • 最近刚刚使用了Service,感觉关系还是挺混乱的。自己实现的Service类,接口,Listener和Binder,暂时还是觉得没搞透彻,需要继续熟悉一下。
  • 参考: http://developer.android.com/guide/topics/fundamentals/services.html#StartingAService
作者:tangwing 发表于2012-5-23 5:08:09 原文链接
阅读:13 评论:0 查看评论

相关 [android 开发 service] 推荐:

Android Service 详解

- - CSDN博客移动开发推荐文章
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面. 其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行. 此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互.

Android开发——关于Service的一些要点

- - CSDN博客推荐文章
service 有两种调用形式:被启动(startService)和被绑定(bindService). 前者要求在Service类中实现onStartCommand方法,Service启动后需要手动停止,否则永远运行下去;后者要求实现onBind方法,当没有组件绑定到此Service时,它自行了断.

Android学习之路——7.Service

- - ITeye博客
这两天又学习了Android四大组件之一的Service. (1)Service不是一个单独的Process,除非特别指派了,也不是一个Thread,但也不是运行在Main Thread中. (3)Service的生命周期:. 调用的Context.startService()   oncreate() --> onStartCommand ()--> Service is running --> The service is stopped by its or a client--> onDestroy() --> Service is shut down .

Android Activity与Service通信

- - CSDN博客移动开发推荐文章
一、当Acitivity和Service处于同一个Application和进程时,通过继承Binder类来实现.      当一个Activity绑定到一个Service上时,它负责维护Service实例的引用,允许你对正在运行的Service进行一些方法调用. 比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信.

Android开发之浅谈Service的基本概况和常见问题

- - CSDN博客移动开发推荐文章
    Service(服务)是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面. 其他应用程序组件可以启动一个Serivce,它将继续在后台运行,即使用户切换到另一个应用程序. 此外,一个组件可以绑定到一个服务与它交互,甚至执行进程间通信(IPC). 例如,一个Serivice可能处理网络交易,播放音乐,执行文件I / O,或与一个内容提供者交互,所有的背景.

Android Service的使用方法 音乐播放器实例

- - ITeye博客
Service翻译成中文是服务,熟悉Windows 系统的同学一定知道很熟悉了. Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行,避免被用户误关闭. 因为Android在某些情况下会自动关闭非前台显示的Activity,所以如果要让一个功能在后台一直执行,不被Android系统关闭,比如说闹钟、后台播放音乐,就必须使用Service.

Android Service与Activity之间通信的几种方式

- - CSDN博客移动开发推荐文章
转载请注明地址 http://blog.csdn.net/xiaanming/article/details/9750689. 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢.

android service常驻内存的一点思考

- - CSDN博客推荐文章
我们总是不想自己的Android service被系统清理,以前时候大家最常用的办法就是在JNI里面fork出子进程,然后监视 service进程状态,被系统杀死了就重启它.. 我分别在android4.3和android5.0上面测试了LBE的清理内存功能,看看是不是会达到不被清理的目的,发现在这两个版本上还是有一些区别的.

Android的Service中弹出窗口解决方法

- - 移动开发 - ITeye博客
转于:http://www.cnblogs.com/fbsk/archive/2011/12/28/2304523.html. 我们在使用Service时,经常会碰到这样的情况,比如用一个service做下载.此时service不一定在最前端,有可能是其它的Activity. 当下载完成时,如何能弹出对话框,让弹出框在当前activity之上.

SPRING BOOT OAUTH2 + KEYCLOAK - service to service call

- - BlogJava-首页技术区
employee-service调用department-service,如果要按OAUTH2.0流程,只需要提供client-id和client-secrect即可. 在KEYCLOAK中引入service-account,即配置该employee-service时,取消standard-flow,同时激活service-account.