认识Android Service
一、使用Service
1、什么是Service以及Service的配置项:
Service是Android组件的一种,派生自android.app.service类。它不提供交互界面,只是在后台运行,进行功能调度或提供数据支持。
<!--android:enabled—是否启用,android:exported—是否导出-->
<service android:name=".MyService" android:enabled="true" android:exported="true"></service>
2、启动/停止Service(MainActivity.java)
public class MainActivity extends AppCompatActivity {
private Intent intent; // Intent只是用来配置程序要启动service的信息
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(MainActivity.this,MyService.class); // 服务的实例在一个操作系统上只有一个
findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(intent); //启动服务
}
});
findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent); //停止服务
}
});
}
}
3、onStartCommand方法(MyService类继承自Service)
@Override
public int onStartCommand(Intent intent, int flags, int startId) { //在外界执行了StartService后执行
new Thread(){
@Override
public void run() {
super.run();
while (true){
System.out.println("服务正在运行...");
try {
sleep(1000); //休眠一秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
return super.onStartCommand(intent, flags, startId);
}
二、绑定Service(启动服务可以使用绑定服务的方式来启动)
1、多个按钮都要实现监听功能(MainActivity.java)
findViewById(R.id.btnStartService).setOnClickListener(this);
findViewById(R.id.btnStopService).setOnClickListener(this);
findViewById(R.id.btnBindService).setOnClickListener(this);
findViewById(R.id.btnUnbindService).setOnClickListener(this);
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.btnStartService:
startService(intent);
break;
case R.id.btnStopService:
stopService(intent);
break;
case R.id.btnBindService: //第二个参数this表示服务的链接,侦听服务的状态
bindService(intent,this, Context.BIND_AUTO_CREATE);
break;
case R.id.btnUnbindService:
unbindService(this);
break;
}
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) { //服务被绑定成功后执行
System.out.println("Service Connected");
}
@Override
public void onServiceDisconnected(ComponentName name) { //服务所在进程奔溃或杀掉时执行 }
2、MyService.java:
@Override
public IBinder onBind(Intent intent) {
return new Binder(); //实现了IBinder接口
}
三、Service生命周期
1、服务的生命周期主要有两个,分别是创建(onCreate)和销毁(onDestroy)。
public int onStartCommand(Intent intent, int flags, int startId) { //点击启动服务按钮,onStartCommand会不断重复执行
System.out.println("onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
public void onCreate() { //点击启动服务按钮,onCreate会执行一次
super.onCreate();
System.out.println("Service create");
}
public void onDestroy() {
super.onDestroy();
System.out.println("Service destroy");
}
(同时启动服务并绑定服务时,必须同时停止服务并解除绑定服务。
启动服务后退出Activity,并不会销毁程序,但是,如果Activity和Service绑定,退出Activity,会取消同Service的绑定。)
2、Service小程序(MyService.java)
private boolean serviceRunning = false;
public void onCreate() {
super.onCreate();
System.out.println("Service create");
serviceRunning = true;
new Thread(){
@Override
public void run() {
super.run();
while (serviceRunning){
System.out.println("服务正在运行...");
try {
sleep(1000); //休眠一秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
public void onDestroy() {
super.onDestroy();
System.out.println("Service destroy");
serviceRunning = false;
}
认识Android Service的更多相关文章
- android service两种启动方式
android service的启动方式有以下两种: 1.Context.startService()方式启动,生命周期如下所示,启动时,startService->onCreate()-> ...
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...
- Android Service完全解析,关于服务你所需知道的一切(下)
转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...
- Android Service完全解析,关于服务你所需知道的一切(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...
- android service 的各种用法(IPC、AIDL)
http://my.oschina.net/mopidick/blog/132325 最近在学android service,感觉终于把service的各种使用场景和用到的技术整理得比较明白了,受益颇 ...
- Android service介绍和启动方式
1.Android service的作用: service通常是用来处理一些耗时操作,或后台执行不提供用户交互界面的操作,例如:下载.播放音乐. 2.Android service的生命周期: ser ...
- Android Service初始
一.Service概念 1.Service是一个应用程序组件 2.Service没有图像化界面 3.Service通常用来处理一些耗时比较长的操作 4.可以使用Service更新ContentProv ...
- Android Service与Thread的区别
Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...
- Android service binder aidl 关系
/********************************************************************************** * Android servic ...
- Android Service AIDL 远程调用服务 【简单音乐播放实例】
Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...
随机推荐
- Everything(文件搜索神器)
前言 Everything官网: http://www.voidtools.com/ 软件版本: V1.3.4.686 (x64) 操作系统: windows 7/10 搜索FTP(内网)资源 比如内 ...
- Linux多线程编程
线程和进程的区别是: 进程是拷贝主进程的数据段和代码段的. 线程是和主进程公用一份数据段和代码段的. 线程一旦创建,就从指定的入口函数开始执行. 相关头文件: #include <pthread ...
- 代码管理工具 --- git的学习笔记二《git的工作原理》
通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...
- 【转】40条常见的移动端Web页面问题解决方案
1.安卓浏览器看背景图片,有些设备会模糊 2.图片加载 3.假如手机网站不用兼容IE浏览器,一般我们会使用zep ...
- [LeetCode] Random Pick Index 随机拾取序列
Given an array of integers with possible duplicates, randomly output the index of a given target num ...
- HDU3068 回文串 Manacher算法
好久没有刷题了,虽然参加过ACM,但是始终没有融会贯通,没有学个彻底.我干啥都是半吊子,一瓶子不满半瓶子晃荡. 就连简单的Manacher算法我也没有刷过,常常为岁月蹉跎而感到后悔. 问题描述 给定一 ...
- 修改 jquery.validate.js 支持非form标签
尝试使用markdown来写一篇blog,啦啦啦 源代码传送门:github 在特殊情况下我们使用jquery.validate.js对用户输入的内容做验证的时候,表单并不是一定包含在form之中,有 ...
- StarUML license key
参考博客:http://blog.csdn.net/Excing/article/details/48998891 方法 将StarUML/www/license/node/LicenseManage ...
- sqli篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
前言 最早接触安全也是从xss攻击和sql注入攻击开始的. 和xss一样屡居OWASPtop10 前三名的漏洞,sqli(sql Injection)sql注入攻击也是web安全中影响较大和影响范围较 ...
- Deconvolution Using Theano
Transposed Convolution, 也叫Fractional Strided Convolution, 或者流行的(错误)称谓: 反卷积, Deconvolution. 定义请参考tuto ...