Android学习——Service(一)

这篇博文来介绍Android另一个十分重要的组件,Service。Service和Activity很类似,区别在于它运行在后台,不可见且没有界面。Service的优先级高于Activity,当系统负载过大时,会优先杀死Activty,但Service很难被系统清除。需要注意的是,Service同样运行在主线程中,不能直接进行耗时操作,而是需要在服务中新开一个线程,在该线程中做耗时操作。Service主要分为本地服务和远程服务。我们先来学习本地服务。

服务的启动方式



Service的启动方式主要有两种:Start方式和Bind方式,我们先来看这两种方式的特点

Start方式:

1.服务跟启动源没有任何联系

2.无法得到服务对象

Bind方式:

1.通过Ibinder接口实例,返回一个ServiceConnection对象给启动源

2.通过ServiceConnection对象的相关方法可以得到Service对象

我们这篇博文,先来介绍Start方式启动服务

Start方式启动服务



和启动Activity很类似,Service也是通过Intent来启动和停止,具体代码如下:

switch (view.getId())
        {
            case R.id.start_bt:
                startintent=new Intent(MainActivity.this,StartService.class);
                startService(startintent);
                break;
            case R.id.stop_bt:
                stopService(startintent);
                break;
        }

启动,自定义的StartService类继承于Service类:

public class StartService extends Service
{
    @Override
    public void onCreate()
    {
        Toast.makeText(getApplicationContext(),"start_service",Toast.LENGTH_SHORT).show();
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        Toast.makeText(getApplicationContext(),"startcommand_service",Toast.LENGTH_SHORT).show();
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy()
    {
        Toast.makeText(getApplicationContext(),"stop_service",Toast.LENGTH_SHORT).show();
        super.onDestroy();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent)
    {
        return null;
    }
}

需要注意的是,onCreate方法,只会在Service第一次被创建时调用,在Service未被停止之前,多次StartService只会调用onStartCommand方法。

最后别忘了在Manifest文件中注册Service:

<service android:name=".StartService"></service>
时间: 2024-08-30 16:15:26

Android学习——Service(一)的相关文章

Android学习Service中遇到的问题

今天学习service,然后遇到了一个force close,log中存在这个一句话: 05-23 14:13:26.408: E/AndroidRuntime(17616): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.exr.service/com.exr.service.Service1}; have you declared this activity in

android学习十八(Service服务的基本用法)

定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: package com.jack.servicetest; import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service { @Over

Android Web Service学习总结(一)

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

Android Web Service学习总结(二)

上篇文章做好了准备工作,现在就实践(android平台调用web service实现号码归属地查询) 1.    Ksoap2-android简介 在Android平台调用web service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP).在Android平台中我们并不会直接使用ksoap2,而是使用ksoap2 android.KSoap2 Androi

[Android学习系列19]Service的一些事

参考: Android Service 详解一:概述 Android Service 详解二:创建一个service Android Service 详解三:从类Service派生service Android Service 详解四:开始停止service[Android学习系列19]Service的一些事,码迷,mamicode.com

Android学习笔记(五一):服务Service(上)- IntentService

对于需要长期运行,例如播放音乐.长期和服务器的连接,即使已不是屏幕当前的activity仍需要运行的情况,采用服务方式.服务将通过API触发启动或者通过IPC(Interprocess Communication)连接请求触发启动.服务将一直运行直至被关闭,或者内存不足时由系统关闭.一般而言,为了节省电量,服务应进行优化减少CPU的消耗和大量网络通信.服务可用于以下的场景: 1.用户离开activity后,仍需继续工作,例如从网络下载文件,播放音乐2.无论activity出现(重现)或离开,都需

android学习之remote service 的aidl详解

写在前面的话: 关于remote service中使用aidl来实现跨进程,多线程通信,我是参考了三篇文章,大概把这个弄明白了. (1)android 官方关于aidl的说明文档 docs/guide/components/aidl.html (2)Android学习笔记23服务Service之AIDL和远程服务实现进程通信以及进程间传递自定义类型参数 http://blog.csdn.net/honeybaby201314/article/details/19989455 (3) Androi

Android学习笔记--服务(Service)

1.服务概述 1.服务是Android四大组件之一,在使用上可以分为本地服务和远程服务,本地服务是指在不影响用户操作的情况下在后台默默的执行一个耗时操作,例如下载,音频播放等.远程服务是指可以供其他应用程序调用的服务. 2.每个服务类都需要在AndroidMainfest.xml中使用<service>标签声明. 3.服务的启动方式分为两种Context.startService()和Context.bindService(), 服务的关闭可以通过外部调用Context.stopService

Android学习笔记(五三):服务Service(下)- Remote Service

之前所谈的Service属于Local Service,即Service和Client在同一进程内(即同一application内),Service的生命周期服从进程的生命周期.在实际应用上,有时希望Service作为后台服务,不仅被同一进程内的activity使用,也可被其他进程所使用,针对这种情况,需要采用bindService,也就是Remote Service的方式. 在Android中,不同app属不同进程(process),进程是安全策略的边界,一个进程不能访问其他进程的存储(例如采