Android基础总结(八)Service

服务两种启动方式(掌握)

  • startService
    • 开始服务,会使进程变成为服务进程
    • 启动服务的activity和服务不再有一毛钱关系
  • bindService
    • 绑定服务不会使进程变成服务进程
    • 绑定服务,是activity与服务建立连接,如果activity销毁了,服务也会被解绑并销毁,但是如果服务被销毁,activity不会被销毁
  • 绑定服务和解绑服务的生命周期方法:onCreate->onBind->onUnbind->onDestroy

找领导办证(掌握)

  • 把服务看成一个领导,服务中有一个banZheng方法,如何才能访问?
  • 绑定服务时,会触发服务的onBind方法,此方法会返回一个Ibinder的对象给MainActivity,通过这个对象访问服务中的方法
  • 绑定服务

    Intent intent = new Intent(this, BanZhengService.class);
    bindService(intent, conn, BIND_AUTO_CREATE);
    
  • 绑定服务时要求传入一个ServiceConnection实现类的对象
  • 定义这个实现类

    class MyServiceconn implements ServiceConnection{
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {zjr = (PublicBusiness) service;
    }
    @Override
    public void onServiceDisconnected(ComponentName name) { 
    }
    

    }

  • 创建实现类对象

     conn = new MyServiceconn();
    
  • 在服务中定义一个类实现Ibinder接口,以在onBind方法中返回

    class ZhongJianRen extends Binder implements PublicBusiness{
    public void QianXian(){//访问服务中的banZheng方法BanZheng();
    }   
    public void daMaJiang(){}
    

    }

  • 把QianXian方法抽取到接口PublicBusiness中定义

两种启动方法混合使用(掌握)

  • 用服务实现音乐播放时,因为音乐播放必须运行在服务进程中,可是音乐服务中的方法,需要被前台Activity所调用,所以需要混合启动音乐服务
  • 先start,再bind,销毁时先unbind,在stop

使用服务注册广播接收者(掌握)

  • Android四大组件都要在清单文件中注册
  • 广播接收者可以使用清单文件注册
    • 一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除
  • 广播接收者可以使用代码注册
    • 需要广播接收者运行时,使用代码注册,不需要时,可以使用代码解除注册
  • 电量改变、屏幕开关,必须使用代码注册

  • 注册广播接收者

    //创建广播接收者对象
    receiver = new ScreenOnOffReceiver();
    //通过IntentFilter对象指定广播接收者接收什么类型的广播
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_SCREEN_ON);//注册广播接收者
    registerReceiver(receiver, filter);
    
  • 解除注册广播接收者

    unregisterReceiver(receiver);
    
  • 解除注册之后,广播接收者将失去作用

本地服务:服务和启动它的组件在同一个进程

远程服务:服务和启动它的组件不在同一个进程

  • 远程服务只能隐式启动,类似隐式启动Activity,在清单文件中配置Service标签时,必须配置intent-filter子节点,并指定action子节点

AIDL(掌握)

  • Android interface definition language
  • 安卓接口定义语言
  • 作用:跨进程通信
  • 应用场景:远程服务中的中间人对象,其他应用是拿不到的,那么在通过绑定服务获取中间人对象时,就无法强制转换,使用aidl,就可以在其他应用中拿到中间人类所实现的接口

支付宝远程服务

  1. 定义支付宝的服务,在服务中定义pay方法
  2. 定义中间人对象,把pay方法抽取成接口
  3. 把抽取出来的接口后缀名改成aidl
  4. 中间人对象直接继承Stub对象
  5. 注册这个支付宝服务,定义它的intent-Filter

需要支付的应用

  1. 把刚才定义好的aidl文件拷贝过来,注意aidl文件所在的包名必须跟原包名一致
  2. 远程绑定支付宝的服务,通过onServiceConnected方法我们可以拿到中间人对象
  3. 把中间人对象通过Stub.asInterface方法强转成定义了pay方法的接口
  4. 调用中间人的pay方法

五种前台进程(掌握)

  1. activity执行了onresume方法,获得焦点
  2. 拥有一个跟正在与用户交互的activity绑定的服务
  3. 拥有一个服务执行了startForeground()方法
  4. 拥有一个正在执行onCreate()、onStart()或者onDestroy()方法中的任意一个的服务
  5. 拥有一个正在执行onReceive方法的广播接收者

两种可见进程(掌握)

  1. activity执行了onPause方法,失去焦点,但是可见
  2. 拥有一个跟可见或前台activity绑定的服务

对话框

确定取消对话框(掌握)

  • 创建对话框构建器对象,类似工厂模式
  • AlertDialog.Builder builder = new Builder(this);
    
  • 设置标题和正文
  • builder.setTitle("警告");
    builder.setMessage("若练此功,必先自宫");
    
  • 设置确定和取消按钮

    builder.setPositiveButton("现在自宫", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "恭喜你自宫成功,现在程序退出", 0).show();}
    });builder.setNegativeButton("下次再说", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();}
    });
    
  • 使用构建器创建出对话框对象

    AlertDialog ad = builder.create();
    ad.show();
    

单选对话框(熟悉)

    AlertDialog.Builder builder = new Builder(this);builder.setTitle("选择你的性别");
  • 定义单选选项
  • final String[] items = new String[]{"男", "女", "其他"
    };
    //-1表示没有默认选择
    //点击侦听的导包要注意别导错
    builder.setSingleChoiceItems(items, -1, new OnClickListener() {//which表示点击的是哪一个选项@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this, "您选择了" + items[which], 0).show();//对话框消失dialog.dismiss();}
    });builder.show();
    

多选对话框(熟悉)

    AlertDialog.Builder builder = new Builder(this);builder.setTitle("请选择你认为最帅的人");
  • 定义多选的选项,因为可以多选,所以需要一个boolean数组来记录哪些选项被选了
  • final String[] items = new String[]{"赵帅哥","赵师哥","赵老师","侃哥"
    };
    //true表示对应位置的选项被选了
    final boolean[] checkedItems = new boolean[]{true,false,false,false,
    };
    builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {//点击某个选项,如果该选项之前没被选择,那么此时isChecked的值为true@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {checkedItems[which] = isChecked;}
    });builder.setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {StringBuffer sb = new StringBuffer();for(int i = 0;i < items.length; i++){sb.append(checkedItems[i] ? items[i] + " " : "");}Toast.makeText(MainActivity.this, sb.toString(), 0).show();}
    });
    builder.show();
    

国际化(掌握)


样式与主题(熟悉)

  • 样式与主题定义方式一样
  • 样式用于布局文件中的组件
  • 主题用于Activity

转载于:https://www.cnblogs.com/DarrenChan/p/6231048.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

疲劳驾驶监测方案_【Nano Energy】TENG用于驾驶员驾驶状态监测

01研究背景研究表明&#xff0c;驾驶员的疲劳和分心会降低其感知能力和对汽车控制的决策能力。大约20%车祸和30%致命车祸的原因是由于驾驶员疲劳和注意力不集中造成的&#xff0c;同时也会导致单车撞击事故和大型车撞击事故发生率上升到50%。因此通过建立智能交通系统(ITS)来提…

升级Struts2.5后使用DMI动态方法调用遇到问题

转自&#xff1a;http://www.lvhongqiang.com/blog429.html 问题&#xff1a; 升级Struts2.5后使用DMI动态方法调用报错&#xff0c;method 找不到。 源码&#xff1a; struts.xml <action name"json_*_*" class"{1}Action" method"{2}"> …

后缀用什么打开_茅台酒瓶口的珠子有什么用,取出来能多倒一杯酒?打开方法教给你...

茅台酒瓶口的珠子有什么用&#xff0c;取出来能多倒一杯酒&#xff1f;打开方法教给你。喝过茅台酒的人都知道&#xff0c;在茅台酒的瓶口处有一个特别的设计&#xff0c;就是里面放里2个珠子&#xff0c;摇晃的时候能听到声音。那么茅台酒的瓶口为什么要放2颗珠子&#xff1f;…

2 django系列之django分页与templatetags

preface 当页面出现的条目多的时候&#xff0c;我们就需要使用分页功能了。Django作为一个知名的web框架&#xff0c;自然也提供了分页功能&#xff0c;下面说说它。 Python-shell 练练手 在python下入手 先创建一个操作对象 >>> hehe [ljf,richer,wang,1,2,3] >&…

计算传递函数乘法_软件开发教程:计算机科学最重要的32个算法

软件开发的根本在于解决各种业务功能需要&#xff0c;实现数字化和自动化&#xff0c;而算法(Algorithm)是对解决方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令。算法代表着用系统的方法描述解决问题的策略机制。在计算机科学领域有32个重要的算法需要研究。简…

Rails下cloud datastore的使用

Rails下cloud datastore的使用 背景 部门有一个项目要用Ruby做 WebAPI&#xff0c;DB使用关系型数据库Cloud Sql和非关系型数据库Cloud Datastore 。 还不了解Ruby On Rails和CloudDatastore的请参考下面的链接。 http://guides.ruby-china.org/ https://thinkit.co.jp/story/2…

hanlp 词频统计_10.HanLP实现k均值--文本聚类

AI人工智能10.HanLP实现k均值--文本聚类10. 文本聚类正所谓物以类聚&#xff0c;人以群分。人们在获取数据时需要整理&#xff0c;将相似的数据归档到一起&#xff0c;自动发现大量样本之间的相似性&#xff0c;这种根据相似性归档的任务称为聚类。10.1 概述聚类聚类(cluster a…

追本溯源 —— 汉语词汇含义的演化

1. 比喻义 枷&#xff1a;旧时一种套在脖子上的刑具&#xff08;想象水浒传里的林冲&#xff0c;还要把手塞进去&#xff09;&#xff1a;&#xff5e;锁&#xff08;旧时的两种刑具&#xff0c;喻束缚&#xff09;。转载于:https://www.cnblogs.com/mtcnn/p/9422411.html

view 冒号作用 组件中属性_如何解析名称中带有冒号的JSON?安卓/ Java...

例如&#xff1a;{“ primary&#xff1a;title”&#xff1a;“小红帽”}由于主要名称和标题之间存在冒号,因此我在Java(Android)中的解析器总是卡住.我可以轻松解析其他任何内容,我只需要帮助.public class MainActivity extends Activity {/** Called when the activity is …

【工具与解决方案】从做项目中积累学习

【Java-Swing】 1.http://java-mans.iteye.com/blog/1650786 JAVA&#xff0d;SWT如何在Jtable单元格中加入复选框Jcheckbox,Jbutton,JcomboBox 2.环境搭建 http://blog.csdn.net/ghuil/article/details/40652645 http://www.cnblogs.com/yaowukonga/archive/2013/02/28/29…

目标检测排行榜_3D领域重大突破!大华股份人工智能取得KITTI Object 3D车辆检测排行榜第一名...

[导读]近日&#xff0c;大华股份基于深度学习技术研发的3D目标检测技术&#xff0c;刷新了The KITTI Vision Benchmark Suite中3D车辆类目检测任务(3D Object Detection Evaluation)排行榜&#xff0c;取得了3D车辆类目检测第一名&#xff0c;这标志着大华股份的人工智能技术在…

MYSQL-5.5二进制包安装

groupadd mysql 添加用户组 useradd mysql -s /sbin/nologin -g mysql -M 添加用户 mv mysql-5.5.54-linux2.6-x86_64.tar.gz /home/ye/software/ 下载软件到软件包 cd /home/ye/software/ tar -xf mysql-5.5.54-linux2.6-x86_64.tar.gz #解压mysql软件 cd mysql-5.5.54-lin…

mysql aes encrypt_mysql加密函数aes_encrypt()和aes_decrypt()使用教程

aes_encrypt()和aes_decrypt()在mysql中是进行加密了&#xff0c;我们今天一起来和各位看看关于mysql中aes_encrypt()和aes_decrypt()函数的使用例子&#xff0e;如果你需要对mysql某些字段进行加解密的话,使用mysql的加解密函数可能比程序中处理更方便.mysql-encrypt-funcs.pn…

为什么选择mysql_为什么选择MySQL数据库即MySQL优势介绍

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

窗口尺寸,文档高,元素宽高的获取方式

一.元素宽高&#xff1a; window.onload function() { var oDiv document.getElementById(div1); /* width height style.width : 样式宽 clientWidth : 可视区宽 offsetWidth : 占位宽 */ alert( oDiv.style.width ); /…

Mariadb使用总结

一、pt-quert-digest使用1、安装perl程序12yum -y install perl-Time-HiResyum -y install perl-DBI二、登录授权123456789service mysqld stop/usr/bin/mysqld_safe --skip-grant-tables &use mysql;update user set passwordpassword(yournewpasswordhere) where userroo…

python执行到input后执行下一程序_Python基础知识储备,如何开关一个while循环

一、什么是循环循环语句就是在某种条件下&#xff0c;一遍一遍重复的执行某个动作。如&#xff1a;从1加到100&#xff0c;重复执行加法的动作&#xff0c;就需要用到循环。二、循环的三要素虽然循环是反复的执行某个动作&#xff0c;但是循环也会停止的&#xff0c;没有停止的…

Intellij idea添加单元测试工具

1.idea 版本是14.0.0 &#xff0c;默认带有Junit&#xff0c;但是不能自动生成单元测试&#xff0c;需要下载JunitGererator2.0插件 2.Settings -Plugins&#xff0c;下载 JunitGenerator V2.0插件 &#xff0c;我的是已经下载好的。下载后提示需要重启 3.下载后 点击需要测试的…

string.empty , , null 以及性能的比较

一&#xff1a;这种结论&#xff0c;个人觉得仍然存疑 http://www.cnblogs.com/wangshuai901/archive/2012/05/06/2485657.html 1.null null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。那么也只有引用型的变量可以为NULL&#xff0c;如果 int…

mysql查询当前库的实例名_oracle查询数据库名、实例名等

oracle中&#xff1a;1、查询数据库名&#xff1a;select name,dbid from v$database;或者show parameter db_name;2、查询实例名&#xff1a;select instance_name from v$instance;或者show parameter instance_name;3、查询数据库域名&#xff1a;select value from v$param…