开发者社区> 小陆要努力> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android四大组件之Service(一)

简介: Service是Android四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。
+关注继续查看

Service是Android四大组件之一,它可以在后台执行长时间运行操作而没有用户界面的应用组件。

Service的启动方式有两种:startService启动和bindService启动,今天先讲讲startService。

先讲讲启动模式:分为显示启动及隐式启动

显式启动

Intent intentStart = new Intent(ServiceActivity.this, StartService.class);
startService(intentStart);
隐式启动:需要设置一个Action,可以把Action设置成Service的全路径名字,在这种情况下android:exported默认为true

Intent serviceIntent=new Intent();
serviceIntent.setAction("com.android.StartService");
startService(serviceIntent);
两种启动方法都可以在同一个应用中使用,对于不同的应用,只能使用隐式方法。

本篇文章主要讲显示启动,而且是使用startService的方式。如上面显式启动一样,使用Intent来启动service,通过该方式启动的Service,调用者与Service之间没有关联,即使调用者退出了,Serviec仍然运行,必须显式调用stopService来停止,并且需要将启动Service的Intent传递给stopService()方法。

stopService(intent);
在使用结果没有手动调用 stopService,就会造成内存泄漏,因此要记得关闭Service。

下面看看通过startService启动的生命周期。

onCreate():当Service第一次被创建时,由系统调用。

onStart():当调用startService方法启动Service时,该方法被调用。

onDestory():当调用stopService或者被系统回收时,该方法被调用。

onCreate跟onDestory只能被调用一次,onStart可以被调用多次。比如第一次调用startService时,这时Service还没有被创建,会调用onCreate方法,然后再调用onStart方法;此时在其他调用再一次用startService启动Service时,只会调用onStart方法,而不会调用onCreate已经存在了,也就是说Service只能有一个,不能创建出两个一摸一样的来,onDestory也是同样的道理,Service已经被销毁了,onDestory就不会再被调用了。

下面是例子:

创建MyService.java,继承Service

public class MyService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
        MLog.e(getClass().getName(), "onCreate");
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        MLog.e(getClass().getName(), "onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onDestroy() {
        MLog.e(getClass().getName(), "onDestroy");
        super.onDestroy();
    }
 
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

AndroidManifest.xml中声明该Service

<service android:name=".service.MyService"/>

Activity或Fragment中去启动该Service,或者去关闭该Service,两个按钮,一个启动,一个关闭。

Intent intentStart = new Intent(ServiceActivity.this, StartService.class);
        findViewById(R.id.btn_start).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startService(intentStart);
            }
        });
        findViewById(R.id.btn_stop).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(intentStart);
            }
        });

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android开发的四大组件
原文链接: http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html android生命周期(详细总结) http://blog.csdn.net/ican87/article/details/21874447 andridod的四大组件(详细总结) http://blog.csdn.net/ican87/article
1364 0
Android开发之路--(2)--Android四大组件
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/47214197     说实话我对Android的理解还是比较浅显的,但是也尝试着写一下自己的感受吧。
851 0
【Android开发】 ListView使用实战详解,你get到了嘛?
【Android开发】 ListView使用实战详解,你get到了嘛?
53 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
88 0
Android开发之ListView使用经验分享
在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目中依旧在使用ListView,本文将总结一下使用过程中遇到的一些问题,与大家共勉~~~ 一、ListView 与 Adapter List...
760 0
Android开发重要参考资料
=======================博客============================= 秋百万 有心课堂 郭霖 源码 安装ffmpeg 胡凯 官方培训课程 litesuitsway 爱哥 trinea robinRobin Hu...
828 0
+关注
小陆要努力
打代码的苦逼日子
60
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载