Anroid四大组件service之本地服务的示例代码
时间:2019-04-07
本文章向大家介绍Anroid四大组件service之本地服务的示例代码,主要包括Anroid四大组件service之本地服务的示例代码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
服务是Android四大组件之一,与Activity一样,代表可执行程序。但Service不像Activity有可操作的用户界面,它是一直在后台运行。用通俗易懂点的话来说:
如果某个应用要在运行时向用户呈现可操作的信息就应该选择Activity,如果不是就选择Service。
Service的生命周期如下:
Service只会被创建一次,也只会被销毁一次。那么,如何创建本地服务呢?
实现代码如下:
package temp.com.androidserivce; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.os.SystemClock; import android.support.annotation.Nullable; import android.util.Log; /** * Created by Administrator on 2017/8/18. */ public class Myservice extends Service { @Override public void onCreate() { Log.i("test", "服务被创建"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("test", "服务被启动"); new Thread(new myRunnable(startId)).start(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Log.i("test", "服务被销毁"); super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } class myRunnable implements Runnable { int startId; public myRunnable(int startId) { this.startId = startId; } @Override public void run() { for (int i = 0; i < 10; i++) { SystemClock.sleep(1000); Log.i("test", i + ""); } //停止服务 //stopSelf(); stopSelf(startId); //当用无参数的停止服务时,将会销毁第一次所启动的服务; //当用带参数的停止服务时,将会销毁最末次所启动的服务; } } }
要声明服务,就必须在manifests中进行配置
<manifest ... > ... <application ... > <service android:name=".Myservice" android:exported="true"/> ... </application> </manifest>
android:exported="true" 设置了这个属性就表示别人也可以使用你的服务。
还有一个需要注意的小点,在Myservice中可以看见我启动时用了一个子线程去帮我实现工作,那么我为什么没有直接把for循环的那段代码写在onStartCommand方法中呢,是因为写在onStartCommand中将会报ANR程序无响应的错误。就是当你所有的事情都去交给主线程做时,就会造成主线程内存溢出,它就会炸了。这个时候也可以用IntentService来取代Service。
package temp.com.androidserivce; import android.app.IntentService; import android.content.Intent; import android.os.SystemClock; import android.util.Log; /** * Created by Administrator on 2017/8/18. */ public class MyService2 extends IntentService { public MyService2() { super(""); } public MyService2(String name) { super(name); } @Override protected void onHandleIntent(Intent intent) { for (int i = 0; i <10 ; i++) { SystemClock.sleep(1000); Log.i("test",i+""); } } }
使用这个相对而言会比较简单。IntentService是Service的子类。它使用工作线程逐一处理所有启动请求。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- 2017年,人类在自己设计的所有游戏中都败给了AI,无一幸免
- 测试组,请用VSS命令行获取最新版本
- 想起温习一下JS中的this apply call arguments
- 学习利用JSON 摆脱表单与业务对象双向转换的繁琐工作
- 代码也疯狂:diagram生成流程图
- 设置你的Gravatar头像的方法
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- IronPython资料
- WordPress免插件仅代码实现“返回顶部、返回底部、评论”效果(样式一)
- encodeURIcomponent编码和ASP.NET之间编码转换
- WordPress免插件仅修改代码去掉评论/留言里的链接
- 阅读Ext 学习Javascript(一)Core/Ext.js
- 利用腾讯的ip地址库做ip地址定位
- WordPress登陆不了后台的原因及解决方法(登陆界面不断返回)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go语言(十 八)context&日志项目
- 使用梯度上升欺骗神经网络,让网络进行错误的分类
- Go语言(十七) 配置文件库项目
- Python 相对路径问题:“No such file or directory“
- 基于etcd服务发现的overlay跨多宿主机容器网络
- Go语言(十六) 日志项目升级
- PyQt5 技术篇-设置窗口相对桌面位置,按屏幕比例
- Go语言(十五) 反射
- SpringBoot应用跨域访问解决方案
- Spring Boot 2.2都有哪些新变化
- Go语言(十四)日志项目
- 如何在Spring Boot中使用Cookies
- 在SpringBoot中使用flyway管理数据库版本状态
- 使用Spring Data JPA进行数据分页与排序
- 搭建一个高可用负载均衡的集群架构(第二部分)