android service 之一 (start service)

来源:未知 责任编辑:智问网络 发表时间:2013-11-04 19:43 点击:

 

我们有两种方式(start与bind)启动一个Service,每一种方式启动的Service生命周期是不一样的,这篇贴子主要写的是start service。

它的生命周期中只有三个阶段:onCreate, onStartCommand(取代原来的onStart方法), onDestroy。如下图:

 

 

需要注意的有:

① 如果是 调用者 直接退出而没有调用stopService 的话,那么被启动的Service 会一直在后台运行,直至其stopService 方法被调用,或者它自己调用stopSelf 方法。

② 在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStartCommand()方法。如果调用startService()方法前服务已经被创建,那么会直接调用onStartCommand()方法。也就是说,多次调用startService()方法并不会导致多次创建服务。另外,不管被start 多少次,只需一次stop 便可将相应的service关闭。

③ 具体的操作应该放在onStartCommand() 里面

以下通过截图来看:

 

上图的中的四个按钮均是针对于同一个Service进行的操作,此时去application ,可以查看到"Running Service" 的列表如下:

 

 

 

这个,我们去点击上面的按钮(分别点击startservice 1 和2 各两次),结果如下:

 

 从图中,我们可以看出,onCreate() 方法只在第一次创建服务的时候被调用了。

现在,通过“返回键”来退回至主界面,然后再去application 的running service中去查看,可得下面的截图:

 

 从此图中,我们可以看出,虽然Activity被finish掉了,但是由它启动的service仍然在后台运行着。

此时,重新打开该应用,然后直接点击stop service 1 和2 按钮各两次(不需再新点击start service按钮),可以如下截图:

 

 从此图中我们可以看出,只有第一次停止服务的时候,才会调用onDestroy() 方法。

此时,再去application 的running service中去查看,可得下面的截图,发现服务确实已经被停止了:

 

 

下面附上部分源码(具体地请参见附件):

Java代码 

// 四个按钮的响应事件 

 

private OnClickListener btnListener = new OnClickListener() { 

        @Override 

        public void onClick(View v) { 

            switch (v.getId()) { 

                case R.id.startSer1: 

                    updateLog("Start Service 1 pressed"); 

                     // 启动服务(如果想传递数据,也可以将其封装进该intent) 

                    startService(intent); 

                    break; 

                case R.id.startSer2: 

                    updateLog("Start Service 2 pressed"); 

                    startService(intent); 

                    break; 

                case R.id.stopSer1: 

                    updateLog("Stop Service 1 pressed"); 

                    // 停止服务 

                    stopService(intent); 

                    break; 

                case R.id.stopSer2: 

                    updateLog("Stop Service 2 pressed"); 

                    stopService(intent); 

                    break; 

                default: 

                    break; 

            } 

        } 

    }; 

 

Java代码 

// service 的实现 

public class MyService extends Service { 

    private static final String TAG = "MyService"; 

 

    @Override 

    public void onCreate() { 

        super.onCreate(); 

        MyServiceActivity.updateLog(TAG + " ----> onCreate()"); 

    } 

 

    @Override 

    public int onStartCommand(Intent intent, int flags, int startId) { 

        MyServiceActivity.updateLog(TAG + " ----> onStartCommand()"); 

        return START_STICKY; 

    } 

 

    @Override 

    public IBinder onBind(Intent intent) { 

        MyServiceActivity.updateLog(TAG + " ----> onBind()"); 

        return null; 

    } 

 

    @Override 

    public void onDestroy() { 

        super.onDestroy(); 

        MyServiceActivity.updateLog(TAG + " ----> onDestroy()"); 

    } 

    

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1