[置顶]android 四大组件之---Service

DESeq2实战:如何用LRT检验分析基因表达随时间变化的模式(附完整代码) 本文详细介绍了如何使用DESeq2中的LRT检验分析基因表达随时间变化的模式,包括实验设计、数据预处理、模型构建、结果提取与可视化等完整流程。通过实战案例和完整代码,帮助生物信息学研究者掌握时间序列RNA-seq分析的核心技术,特别适合需要快速上手的实践者。 阅读详情
服务

服务的生命周期

---
  1 开启服务的生命周期
完整的生命周期:onCreate()-->onStartCommand()-->onDestroy()

* 开启服务:onCreate()-->onStartCommand()
* 停止服务:onDestroy()

* 特点:
        1. 服务可以被多次开启,每次开启都执行onStartCommand()方法
        2. 服务只能被停止一次,多次停止服务
        3. 长期运行在后台

  2 bind绑定服务的生命周期
完整的生命周期:onCreate()-->onBind()-->onUnbind()-->onDestroy()

* 绑定服务:onCreate()-->onBind()
* 解绑服务:onUnbind()-->onDestroy()

* 特点:
        1. 服务只能被绑定一次,多次绑定无效
        2. 服务只能被解绑一次,多次解绑会抛出异常
        3. 不可以长期运行在后台
        4. Activity和绑定他的服务同生共死
        5. 可以调用服务里的方法

* 区别: 1. 能不能长期运行在后台
        2.  能不能调用服务里的方法

绑定服务调用方法

---
  3 绑定服务调用服务里的方法
服务被绑定成功后,拿到服务返回的中间人,用中间人间接调用服务里的方法

    Activity:
       

 1 /**
 2      * bind方式绑定服务
 3      */
 4     public void bind(View v) {
 5         /**
 6          * service :意图 ServiceConnection:Activity和service连接通道
 7          * BIND_AUTO_CREATE:绑定服务时,如果服务不存在,则创建
 8          */
 9         Log.d(TAG, "bind:1. 绑定服务");
10         conn = new MyConn();
11         bindService(intent, conn, BIND_AUTO_CREATE);
12     }
13 
14     /**
15      * 解绑服务
16      */
17     public void unbind(View v) {
18 
19         Log.d(TAG, "unbind:服务被解绑啦。。。");
20         unbindService(conn);
21     }
22 
23     /**
24      * 调用服务里的方法
25      * 
26      */
27     public void diao(View v) {
28 
29         xiaowu.qianShouMM(99999);
30         Log.d(TAG, "diao:6. 用服务的内部类间接调用服务里的方法");
31     }
32 
33     class MyConn implements ServiceConnection {
34 
35         // Activity和service已经连接成功喽
36         @Override
37         public void onServiceConnected(ComponentName name, IBinder service) {
38 
39             Log.d(TAG, "onServiceConnected:4. 服务连接成功了");
40             xiaowu = (WuMiShu) service;
41             Log.d(TAG, "onServiceConnected:5. 在Activity中拿到了服务里的内部类");
42         }
43 
44         // 失去连接了
45         @Override
46         public void onServiceDisconnected(ComponentName name) {
47 
48             Log.d(TAG, "onServiceDisconnected: 失去连接了...");
49         }
50     }
51 
52     @Override
53     protected void onDestroy() {
54 
55         unbindService(conn);
56         super.onDestroy();
57     }


    Service:
         

 1 /**
 2      * 服务里的方法
 3      */
 4     public void methodInService() {
 5 
 6         Toast.makeText(this, "我是服务里的方法,来吊我啊。。。", 0).show();
 7     }
 8 
 9     @Override
10     public IBinder onBind(Intent intent) {
11 
12         Log.d(TAG, "onBind:2. 服务被绑定成功喽");
13         Log.d(TAG, "onBind 3. 服务绑定成功后,返回WuMiShu");
14         return new WuMiShu();
15     }
16 
17     /**
18      * 服务里的内部类, 内部类调用外部类的方法 中间人 小蜜
19      */
20     public class WuMiShu extends Binder {
21 
22         /**
23          * 调用外部类的方法
24          * 
25          * @param money
26          */
27         public void qianShouMM(int money) {
28 
29             if (money > 5000) {
30                 methodInService();
31             } else {
32                 Toast.makeText(MyService.this, "屌丝注定单身", 0)
33                         .show();
34             }
35         }
36     }
37 
38     @Override
39     public boolean onUnbind(Intent intent) {
40 
41         Log.d(TAG, "onUnbind:");
42         return super.onUnbind(intent);
43     }
44 
45     @Override
46     public void onCreate() {
47 
48         super.onCreate();
49         Log.d(TAG, "onCreate:");
50     }
51 
52     @Override
53     public int onStartCommand(Intent intent, int flags, int startId) {
54 
55         Log.d(TAG, "onStartCommand:");
56         return super.onStartCommand(intent, flags, startId);
57     }
58 
59     @Override
60     public void onDestroy() {
61 
62         super.onDestroy();
63         Log.d(TAG, "onDestroy:");
64     }

 

  

  4 绑定服务抽取接口
隐藏具体的实现细节,只暴露程序员想暴露的方法

1. 写一个接口,接口里写一个方法
2. 让服务的内部类ChenMiShu实现IService接口
3. 当Activity这边连接成功后,Binder强转成IService接口类型
4. 用IService接口间接调用服务里的方法

  5 混合方式开启服务
为什么要用混合方式启动服务:即想服务长期运行在后台,又想调用服务里的方法

开发中推荐的步骤:startService()保证服务长期运行在后台
                 bindService()可以调用服务里的方法
                 unBindService()解除绑定服务
                stopService()后台就没有这个服务了
远程服务

---
  6 本地服务和远程服务
* 本地服务:服务组件在自己的应用程序里
* 远程服务:服务组件不在自己的应用程序里

  7 本地应用调用远程服务中的方法
AIDL:android interface defination language 安卓接口定义语言

    编写步骤:
        远程服务工程:
            1. 把IService.java改成.aidl文件
            2. 去掉public 修饰符
            3. 让服务里的内部类继承IService.Stub

  Service:

 

 1 @Override
 2     public IBinder onBind(Intent intent) {
 3         Log.d(TAG, "onBind");
 4         return new ChenMiShu();
 5     }
 6     /**
 7      * 陈秘书
 8      */
 9     class ChenMiShu extends IService.Stub{
10 
11         @Override
12         public void callMethodInRemoteService() {
13             qianShouYangNiu();
14         }
15         
16     }
17     
18     /**
19      * 远程服务里的方法
20      */
21     public void qianShouYangNiu(){
22         Log.e(TAG, "qianShouYangNiu:我来了,你在哪?我在美国,咱们中间隔着一个太平洋....");
23     }

 

 

  IService.aidl

1  interface IService {
2 
3     /**
4      * 调用远程服务里 的方法
5      */
6      void callMethodInRemoteService();
7 }

 


        本地应用:
            4. 创建一个和远程服务.aidl文件所在的一样包
            5. 吧06工程里的IService.aidl文件复制到这个包里
            6. 用IService.Stub.asInterface(service)强转成IService
            7. 间接调用远程服务了的方法,处理RemoteException

  

  Activity:

 

 1 /**
 2      * start开启服务
 3      * 
 4      * @param v
 5      */
 6     public void start(View v) {
 7         intent = new Intent();
 8         // 设置动作
 9         intent.setAction("wo.kan.dai.ma.ru.chu.lian");
10         // 可选,设置数据
11         // 默认是DEFAULT,可以不写
12         startService(intent);
13     }
14 
15     /**
16      * stop停止服务
17      * 
18      * @param v
19      */
20     public void stop(View v) {
21         stopService(intent);
22     }
23 
24     /**
25      * bind绑定服务
26      * 
27      * @param v
28      */
29     public void bind(View v) {
30         Intent service = new Intent();
31         // 设置动作
32         service.setAction("wo.kan.dai.ma.ru.chu.lian");
33 
34         mConn = new MyConn();
35         bindService(service, mConn, BIND_AUTO_CREATE);
36     }
37 
38     /**
39      * Activity和远程服务里的连接通道
40      */
41     class MyConn implements ServiceConnection {
42         @Override
43         public void onServiceConnected(ComponentName name, IBinder service) {
44             Log.d(TAG, "onServiceConnected:连接成功");
45             // service强转成 IService接口类型
46             mService = IService.Stub.asInterface(service);
47         }
48 
49         @Override
50         public void onServiceDisconnected(ComponentName name) {
51         }
52 
53     }
54 
55     /**
56      * 解绑服务
57      * 
58      * @param v
59      */
60     public void unbind(View v) {
61         unbindService(mConn);
62     }
63 
64     /**
65      * 调用远程服务里的方法
66      */
67     public void callremotemethod(View view) {
68         try {
69             mService.callMethodInRemoteService();
70         } catch (RemoteException e) {
71             e.printStackTrace();
72         }
73     }

 

 

  IService.aidl

1  interface IService {
2 
3     /**
4      * 调用远程服务里 的方法
5      */
6      void callMethodInRemoteService();
7 }

 

 

  清单代码:

  

1  <activity
2             android:name="cn.zxr.local.MainActivity"
3             android:label="@string/app_name" >
4             <intent-filter>
5                 <action android:name="android.intent.action.MAIN" />
6 
7                 <category android:name="android.intent.category.LAUNCHER" />
8             </intent-filter>
9         </activity>

 

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版 Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。 立即下载

相关推荐

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码)

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码)

她是不会无条件的!! 2万+

android 四大组件之---Service

服务 服务的生命周期 ---   1 开启服务的生命周期 完整的生命周期:onCreate()-->onStartCommand()-->onDestroy() *开启服务:onCreate()-->onStartCommand() *停止服务:onDestroy() *特点: 1. 服务可以被多次开启,每次开启都执行onStar...

weixin_30362083的博客 123

OpenAI Codex 国内安装配置全攻略:从零到实战的 AI 编程助手集成指南

AI 编程助手正成为提升开发效率的关键工具,其核心原理是基于大规模语言模型对代码语义进行深度理解与生成。这类技术通过将自然语言指令转化为可执行的代码、自动化重构与调试,为开发者提供了智能化的结对编程体验,其技术价值在于显著降低编码复杂度、加速项目迭代。在实际应用场景中,AI 编程助手可集成于日常开发流,辅助完成代码生成、项目分析与自动化任务。本文聚焦于 OpenAI 的 Codex,针对国内开发者在网络、认证和配置上的常见挑战,提供了涵盖多种安装方式、详细配置步骤及核心使用技巧的实战指南,并特别介绍了如何利

weixin_28715081的博客 408

service之我见

  以下是小编在开发过程中对service的一些体会。   1.service相对于activity来说,它是没有具体的界面的,它是一个后台工作的组件。ex:背景音乐等!   2.在activity中启动service是用startservice(intent),停止service是stopservice(intent)   3.service跟activity一样也有它自己的生命周期如下图...

weixin_30376163的博客 155

ENVI 5.3与IDL 8.5安装指南:从下载到激活的完整流程

本文提供了一份详细的ENVI 5.3与IDL 8.5安装教程,涵盖从获取安装包、运行主程序、安装许可证到关键文件替换的完整流程。指南重点解决了激活过程中的常见问题,并分享了个人实践经验,旨在帮助用户,特别是遥感图像处理初学者,一次性顺利完成软件部署,为后续的科研与开发工作奠定基础。

weixin_29213827的博客 545

PyCharm配置SSH远程解释器第3步时弹框报错:com.google.gson.stream.MalformedJsonException: Expected value at l...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1926

android 应用置顶到最前端_Android 将后台应用切换到前台

目录需求分析代码实现需求分析1、项目中有一个需求,需要调用打开本地安装好的第三方 APP,然后在某个时刻需要将自己的 APP仍然从后台切换到前端(置顶)。2、效果如下:点击 “开始”之后,打开安装好的 微博 APP,休眠10秒后,再重新将自己的应用 "Xiong" 置顶到最前端。 3、环境:Android Studion 3.1.2、minSdkVersion 17、targetSdkVersi...

weixin_42680139的博客 4137

小梅哥Xilinx FPGA学习笔记11——亚稳态

亚稳态就是D触发器输入信号在其数据窗口期内发生变化,导致D触发器的输出进入一段时间的不稳定状态,有可能发生振荡,并最终随机稳定在高电平或者低电平。

m0_51430584的博客 631

android 视图(view)置顶

在很多音乐播放器中都会出现歌词的置顶,这种置顶是对于整个系统而言的。 实现方式 WindowManager wm = (WindowManager)getApplicationContext().getSystemService(WINDOW_SERVICE);//获得WindowManager WindowManager.LayoutParams para...

weixin_30432007的博客 1048

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

Keras中神经网络可视化模块keras.utils.visualize_util安装配置方法

jacke121的专栏 2759

OKX 欧易 交易机器人开发基础

接口文档: https://www.okx.com/docs-v5/zh/#overview REST API 常用请求 查看账户余额 结果数据格式: 获取限价 结果格式: 获取指数行情 数据结构: 下单 结果数据: 获取未成交订单列表 返回结果: 撤单 结果结构:

Willin Wang 的全栈升级指南 2万+

Android根据包名判断程序是否在运行,是否位于最前端,以及将应用置顶到最前端

public static boolean isRunningApk(String packagename) { Set<String> rProcess = new HashSet<String>(); try { Process p = Runtime.getRuntime().exec("ps");//使用ps命令...

liuxiangsheng911的博客 2445

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码结构有所调整,使用起来更方便) 深度学习三维重建 MVSNet-ECCV-2018 (源码、pytorch版、原文+注释、译文+批注)Meshlab查看三维点云时 ,使用技巧总结。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2937

Android 四大组件 详解

[置顶]Android四大组件详解 分类:Android四大组件2013-02-09 16:2319411人阅读评论(13)收藏举报 Android开发 注:本文主要来自网易的一个博主的文章,经过阅读,总结,故留下文章在此 Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content P...

weixin_30649859的博客 94

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android将后台应用置顶及moveTaskToFront的用法

private void bring2Front() { ActivityManager activtyManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> runningTask...

ming_311的专栏 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[置顶]service之我见

以下是小编在开发过程中对service的一些体会。   1.service相对于activity来说,它是没有具体的界面的,它是一个后台工作的组件。ex:背景音乐等!   2.在activity中启动service是用startservice(intent),停止service是stopservice(intent)   3.service跟activity一样也有它自己的生命周期如下图

ll444169487的博客 323

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android之四大组件、六大布局、五大存储

Android之四大组件、六大布局、五大存储 置顶 2016年09月06日 16:15:36 冰糖葫芦三剑客 阅读数:94689                                                                                一.四大组件:          Android四大组件分别为activity、service、con...

niewq的专栏 358

Android入门第一关:Android四大组件

前言 我们是程序员,每天都在了解最新的技术,每天都在学习编程语言、框架或者库。很多人都有这样的感觉,不要再更新了,我已经学不动了。 要知道新的东西每年都在变化,可能之前很火的框架现在已经不再用了。对于程序员来说,打好基础才是主要的。 今天把Android的四大组件总结一下,这块也是面试中的高频问题区域。 Activity 生命周期 对于Activity,来说最主要的就是它的生命周期了。 Acti...

weixin_34025151的博客 179

[置顶] Android之Notification使用大全

在3.0以后官方就推荐用建造者模式建Notification                总结了在各种API下Notification的使用情况、关于自定义通知栏的RemoteView的使用可以参考任永刚大神的《Android开发艺术探索》第五章,本人后续也会整理总结,方便日后使用 package com.yzw.android; import

小志伟的博客 944

Android四大组件之BroadcastReceveier

Android四大组件之BroadcastReceveier@(Blog)[马克飞象|Markdown|Android]什么是BroadcasetReceveier在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。 上面是在其他地方粘来的解释,我的理解是这就是一个事

XuDaojie的专栏 809

[置顶] Android Notification和权限机制探讨

最近为了在部门内做一次小型的技术分享,深入了解了一下Notification的实现原理,以及Android的权限机制。在此做个记录,文章可能比较长,没耐心的话就直接看题纲吧。 先看一下下面两张图 图一: 看到这图可能大家不太明白,这和我们的notification有什么关系,我来简单介绍一下背景,这是发生在15年NBA季后赛期间,火箭队对阵小牛队,火箭队以3:1领先,只要再赢

阳光灿烂的日子的博客 1843

[置顶]Android 项目开发 基于Web Service 服务的中英翻译软件(三) Web Service服务 & Ksoap2 项目

关于Web Service   Android 应用通常是运行手机平台上,手机系统的硬件资源远远比不上PC平台,不管是存储能力还是计算能力,在Android平台上运行一些小的应用时可能的,但对于需要进行大量数据处理,复杂的计算么还是只能部署在远程服务器上,而Android应用只能充当这些应用的客户端,而这款中英翻译软件,其实就是部署在服务器上中英翻译服务的客户访问窗口。用户可以通过客户端来访问服

wuchenxy的博客 533

显示软键盘、recycleiview分割线、指定item置顶

EditText获取焦点并显示软键盘 public static void showSoftInputFromWindow(Activity activity, EditText editText) { editText.setFocusable(true); editText.setFocusableInTouchMode(true); ...

qq_39252578的博客 319

[置顶] android点滴3

Android判断是Pad或者手机 public boolean isTabletDevice() { TelephonyManager telephony = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE); int type = telephony.g

gundumw100的专栏 598

[置顶] Android Service与Activity之间通信的几种方式

转载请注明地址http://blog.youkuaiyun.com/xiaanming/article/details/9750689 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,In...

weixin_30856965的博客 57

[置顶] Android开发之如何保证Service不被杀掉(broadcast+system/app)

序言 最近项目要实现这样一个效果:运行后,要有一个service始终保持在后台运行,不管用户作出什么操作,都要保证service不被kill,这可真是一个难题。参考了现今各种定制版的系统和安全厂商牛虻软件,如何能保证自己的Service不被杀死呢? 其实除了常规的手段,我们可以参考一下微信和360,设置-程序-正在运行,可以看到微信是同时开启了两个进程和服务: 【有兴趣可

qq654783742的专栏 502
上一篇: [置顶]会话技术( Cookie ,Session)
下一篇: [置顶]showSetPwdDialog--自定义对话框
Jusenr
博客等级 码龄10年 13粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jusenr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值