Android-Activity生命周期、广播接收者、服务
- Activity三种状态
- 运行:Activity在最前端运行
- 停止:Activity不可见,完全被覆盖
- 暂停:Activity可见,但前端还有其他Activity
- 生命周期的七种方法 ***
- 开启主界面时,onCreate()、onStart()、onResume()方法执行
- 由主界面进入子界面时
- 如果子界面完全挡住了主界面,主界面不可见,那么 onStop()方法会被执行
- 如果此时返回上一界面,onReStart()方法执行
- 如果子界面局部挡住了主界面,主界面还可见,那么onPause()方法会执行
- 如果此时返回上一界面,onResume()方法执行
- 如果子界面完全挡住了主界面,主界面不可见,那么 onStop()方法会被执行
- 当其他应用需要内存空间时,当前应用会被杀死并重新创建
- 横竖屏切换:也会导致Activity重建,如果要保证数据的完整性可预先保存数据(横竖屏切换和被杀死可shi用)
- onSaveInstanceState(Bundle bundle) : 摧毁前保存数据
- onRestoreInstanceState(Bundle bundle) :获取/恢复原来的数据
- 返回键和Home键的效果不一样
- 返回键:Activity生命周期destory
- Home键:Activity生命周期未销毁
- 配置清单文件使Activity对象不销毁
- 在当前主界面中配置:<activity android:configChanges="orientation" .... />
- 在主界面对应的类中重写:onConfigurationChange()
- *** 启动模式 (LaunchMode),在每个Activity的清单文件中配置:<activity android:launchMode= "singleInstance" />
- standard:每次都会创建
- singleTop:如果在栈顶就不创建,如果不存在就创建,如果存在但不在栈顶,会再创建一个。系统浏览器书签
- singleTask:如果在栈顶就不创建,如果不存在就创建,如果存在但不在栈顶,会将它上面的Activity销毁,BrowersActivity开销很大
- singleInstance:如果在栈顶就不创建,如果不存在就创建,如果存在但不在栈顶,会将它移至栈顶(最前端),金山词霸,有道词典用到
- 内存管理
- 空:容易被杀,360垃圾清理就是杀死为空的应用
- 后台:Activity处停止状态
二、广播接收者 BroadcastReceiver
- 定义广播接收者:步骤
- 定义类继承BroadcastReceiver,重写onCreate方法
- 在清单文件中配置
- <receiver android:name=".MyBroadcastReceiver" >
- <intent-filte>
- <action android:name="android.intent.action.BOOT_COMPLETE"/>监听开机
- </intent-filte>
- <intent-filte>
- <receiver android:name=".MyBroadcastReceiver" >
- 如果需要,可以在<receiver/>中配置权限,指定发送者的发送权限
- 发送广播
- 发送无序广播:发送端和接受端都可以指定权限
- Intent intent = new Intent("com.itheima.broadcast.TEST"); com.itheima.broadcast.TEST 为发送广播的ACTION
- sendBroadcast(intent); //发出广播
- 只要接受者清单文件中满足了 com.itheima.broadcast.TEST 。。就可以接受到发送的广播,接受顺序以安装应用的先后接受广播。
- <receiver android:name=".MyBroadcastReceiver">
- <intent-filte>
- <action android:name=" com.itheima.broadcast.TEST "/>
- </intent-filte>‘
- <intent-filte>
- <receiver android:name=".MyBroadcastReceiver">
- 发送者可以指定接受者需具有的权限
- Intent intent = new Intent("com.itheima.broadcast.TEST");
- sendBroadcast(intent, "指定的权限"); //发送指定权限的广播,那么接受者要接受该广播必须具备权限
- 接受者也可以指定发送者发送的权限,否则不收该广播
- 在接受者清单文件中 < receiver android:permission="android.permission.WRITE_EXTERNAL_STORE"/>
- 那么发送者就必须要有该权限才能发送给他
- 声明权限:Intent intent = new Intent("com.itheima.broadcast.TEST","自定义的权限");
- 还需要在发送者清单文件中 配置<permission name = "自定义的权限"/>
- 发送有序广播: 有顺序, 可以通过priority控制, 可以使用结果数据, 可以中断
- Intent intent = new Intent("接受者的ACTION");
- sendOrderRroadcast(intent,"接受者的权限");
- 在接受者中<receiver > <intent-filte priority="1">配置 priority 优先级,数字越大,优先级越高
- sendOrderedBroadcast (Intent intent, String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)接受者可以修改数据
- abortBroadcast() 中断广播, 如果在某个接收者中调用, 那么优先级更低的其他接收者就不能收到广播了, 除非在发送时指定的那个resultReceiver
- 发送无序广播:发送端和接受端都可以指定权限
- 传递数据
- 无论有序广播还是无序广播, 都可以在Intent中putExtra(),然后在接收者的onReceive()方法的形参Intent中获取数据, 无法修改
三、短信黑名单
- Object[] pdus = intent.getExtra().get("pdus"); //获取短信数据
- SmsMessage sms = SmsMessage.createFromPdu( (byte[]) pdus ); //for遍历获取信息
- String address = sms.getOriginationAddress(); //获得发送短信人的地址
- if( "1892242421".equals(address) ) abortBroadCast(); //如果联系人为指定的拦截对象,中断广播
四、自动IP拨号
- Stirng num = getResultData();
- if(!num.startWiths("19571")) num = "19571" + num;
- 什么是服务?
- 服务是一种后台运行的组件,不容易被杀死
- 怎么创建服务
- 继承Service
- 清单文件中配置 <service />
- 启动/停止服务
- startService():开启服务,如果服务没有创建,先执行onCreate()创建再执行onStart()开启
- stopService():停止服务,执行onDestory()方法
- 绑定/解绑服务
- bindService() : 执行onBind()方法;
- unbindService():执行onUnbind()方法;
- 调用远程服务:两个不同应用程序的通信
- 服务端(Service):
- 重写onCreate()、onStart()、onBind()、onUnbind()、onDestory() 并定义业务方法
- 要在不同程序调用业务方法,将该方法放到绑定的方法中返回。
- 抽象出业务方法的接口,该接口要去掉修饰符public
- 将接口的 .java 改为 .aidl
- Service中定义内部类继承 Stub ,添加该抽象类未实现的业务接口方法
- 在该实现中 调用自己定义的业务方法
- 客户端(Client):
- 根据不同的按钮开启不同的服务
- 拷贝.aibl到客户端工程
- 在绑定服务中根据ServiceConnection接口获得Ibind对象,
- 在onServiceConnected()中调用Stub.asInterface(service)方法把IBinder转为接口类
- 在调用业务方法的按钮事件中,使用 Stub.asInterface(service)的实例获得业务对象
- 服务端(Service):
Android-Activity生命周期、广播接收者、服务相关推荐
- Android Activity 生命周期详解及监听
前言 系列文章: Android Activity 与View 的互动思考 Android Activity 生命周期详解及监听 Android onSaveInstanceState/onResto ...
- Android activity 生命周期(一)
Android activity 生命周期(一) 转载请注明出处:http://blog.csdn.net/chenlinfeng772885775/article/details/53672919 ...
- android activity生命周期_Android岗高频面试题合一集,看你能答出几题?
前言 面试季黄金时期来袭,想必许多朋友在这时有找工作.换工作.跳槽涨薪等想法,但你们都有一个相同的过程那就是面试.大家肯定想知道面试时都问哪些面试相关问题,所以就去网上查找题去刷题,为了省去大家找题的 ...
- Android Activity生命周期★
1.Activity Activity由Activity栈管理.启动一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部. A ...
- Android activity生命周期
这篇博客主要包含以下知识点: activity介绍. activity生命周期的详细过程(不同情况下的变化以及状态的改变).finish和onDestory方法的关系.onSaveInstanceSt ...
- Android Activity生命周期举例说明(图文)
同学电话面试提及到Activity生命周期的详细说明,现整理如下: 转载请标明姓名及出处:大飞_Rflyee - http://blog.csdn.net/rflyee/article/details ...
- android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...
Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...
- Android Activity 生命周期和重要的相关函数(基础一)
总结: 1.oncreate 2.onstart 可见但不交互 3.onrestart 从其他界面重新调转过来 4.onresume 可交互 5.on ...
- xamarin Android activity生命周期详解
学Xamarin我为什么要写这样一篇关于Android 的activity生命周期的文章 已经学Xamarin android有一段时间了,现在想起当初Xamarin也走了不少的弯路.当然Xamari ...
- Android Activity生命周期管理
http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...
最新文章
- 基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测,目标追踪,卷积神经网络
- 家里网线的接法和顺序
- 别羡慕别人的舒服,静下心来坚持奋斗!!!
- 【搜索/推荐排序】NCF,DeepCross,Deep Crossing
- 运维:使用awk命令获取文本的某一行,某一列
- 浏览器可以用c语言编辑吗,如何在浏览器端运行c/c++语言编写的代码
- 实例 20 重定向输出流实现程序日志
- python ssd目标检测_目标检测算法之SSD的数据增强策略
- C语言练习——打印九九乘法表
- delphi打包python_python for delphi 组件安装和调试的那些坑儿 !
- 【MATLAB深度学习工具箱】 训练时Data no longer exists on the device错误
- 一维热传导的有限元求解基础与COMSOL弱形式实现
- 暴力破解附近局域网WiFi密码
- 软件测试项目案例哪里找?【银行/教育/商城/金融/等等....】
- 3每个 Yocto 跟踪工具的基本用法(附示例)
- 江苏工匠杯_easyphp_wp
- sentinel.conf样例
- 启动新内核出现:Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
- 网络工程师考试内容纲要
- Java--Mac系统终端编译运行java文件