Android后台服务Service
发布日期:2021-06-30 21:21:39
浏览次数:3
分类:技术文章
本文共 3666 字,大约阅读时间需要 12 分钟。
后台服务
桌面应用程序:可见
服务:不可见 长期在后台运行 帮助应用执行耗时的操作
安卓的服务:安卓四大组件之一 不可见 后台长期运行 界面与服务有时候要执行数据交互
如何创建服务:
1. 创建一个类 继承Service.
package com.li.servce;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;public class MyService extends Service{ //Service启动时调用 @Override public void onCreate() { super.onCreate(); Log.v("wang", "OnCreate 服务启动时调用"); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } //服务被关闭时调用 @Override public void onDestroy() { super.onDestroy(); Log.v("wang", "onDestroy 服务关闭时"); }}
四大组件多需要配置配置
调用服务器
package com.li.servce;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void createServiceClick(View v){ Intent intent = new Intent(this,MyService.class); //启动servicce服务 startService(intent); } //虽然应用界面已经退出 但是服务还是存在的 //停止服务 可以通过按钮来关闭 可以通过代码关闭服务 public void clickStopService(View v){ Intent name= new Intent(this,MyService.class); stopService(name);//name表示停止哪一个服务 } }
电话窃听器原理
开发步骤:
1. 创建一个后台运行的服务
2. 启动应用的时候启动服务
3. 在onCreate()调用的时候 创建一个系统的服务 并获取电话的状态
TelephonyManagermanager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
//1. 注册监听器 2. 监听的事件
代码:
package com.li.callMyVoce;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;public class CallService extends Service{ @Override public void onCreate() { super.onCreate(); //开始时刻接听用户电话状态 休闲(没有接听电话) 邻响 接通 挂断 //如果自己去写代码接通用户状态 会很复杂 的操作 求系统 //系统服务getSystemService(name) 电话有关的服务 服务的后缀一般以service manager ...作为后缀 //TelephonyManager 他表示可以接听各种各样跟手机有关的很多服务 他表是一个大的概念 TelephonyManager manager=(TelephonyManager)getSystemService(TELEPHONY_SERVICE); //manager.listen(listener, events) manager.listen(new PhoneStateListener(){ //listener表是接听手机的那个状态比如说接听电话的服务new PhoneStateListenter()//重写方法等等 @Override public void onCallStateChanged(int state, String incomingNumber) {//incomingNumber表示电话号码 只有来点时才有值 switch (state) { case TelephonyManager.CALL_STATE_IDLE: Log.v("wang", "CALL_STATE_IDLE 休闲状态 挂断"); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.v("wang", "CALL_STATE_OFFHOOK 接通"); break; case TelephonyManager.CALL_STATE_RINGING: Log.v("wang", "CALL_STATE_RINGING 电话铃声响状态"+incomingNumber); break; } } }, PhoneStateListener.LISTEN_CALL_STATE); // events 就是要指定对那些事件比较关心 } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }}
调用:
package com.li.callMyVoce;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1.时时刻刻的接听用户当前的打电话状态 ----> Service //2.当用户开启接听电话的时候 开始录音 用户挂断了电话停止录音--->录音功能 //3.当发现网络状态(广播 判断是否有网络)是开着的时候就应该发送录音到后台服务器 } public void clickService(View v){ Intent intent = new Intent(this,CallService.class); startService(intent); }}
配置文件里面的铭感操作
服务和子线程的区别
总结:
* 服务是长期在后台运行的
* 开启一个用真的死循环的子线程也是在后台长期运行
*如果一个应用程序有后台的服务在运行,即使你杀掉进程,进程和服务还会自动的复活
* 如果一个应用程序只有后台的子线程运行 杀掉进程进程和子线程都挂了
* 如果你要保证一个后台的操作长期运行1.开启服务 2.在服务里面创建线程
转载地址:https://liwangjiang.blog.csdn.net/article/details/79706513 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年05月03日 04时10分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
记一次曲折的Debug经历
2019-04-30
Impala支持Google云存储开发笔记
2019-04-30
如何在Apache JIRA中搜索issue
2019-04-30
scrapy 排错记录
2019-04-30
ACM路上的一大失误
2019-04-30
HDOJ2049 不容易系列之(4)——考新郎
2019-04-30
CodeForces 248B - Chilly Willy - 找规律
2019-04-30
POJ-2418 Hardwood Species(Trie树)(map)
2019-04-30
HDU-4300 Clairewd’s message + 4333(扩展KMP)
2019-04-30
HDU 1592 Half of and a Half(高精度)
2019-04-30
POJ-3304 Segments(计算几何)
2019-04-30
UVA-11538 Chess Queen(数学)
2019-04-30
UVA-11401 Triangle Counting(数学优化)
2019-04-30
Codeforces Round #369 (Div. 2)
2019-04-30
UVA 11426 GCD - Extreme (II)(欧拉函数)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30
基于SSM的兼职论坛系统的设计与实现
2019-04-30