APIGuide_应用组件
来源:互联网 发布:韩顺平js视频教程下载 编辑:程序博客网 时间:2024/05/21 10:30
APIGuide_应用组件
Intent和Intent Filter(周二)
- Intent是一个消息传递对象。
- 分类
- 显示Intent(限定了完整类名),没有特殊要求最好使用显示Intent
- 隐式Intent:不指定特定的组建名称,至声明操作内容。
- 系统识别意图的依据:Action\Data&DataType\Categary
- <intent-filter>:当使用隐式Intent时,可以为组件声明意图过滤器,来约束当前组件需要满足的意图条件,这意味着只要有应用显示的调用含有该意图过滤器的组件,同时他满足了上面识别意图的三个标识,则可达到启动该组件的目的。例如:在淘宝app中启动天猫app展示天猫商店商品。但需要注意当我们通过显示意图调用潜在的隐式意图app时,如果符合意图过滤器的组建个数不同,需要处理的手段也不同:
- 0:没有满足的组件,调用应用会崩溃,所以所有类似调用方式都需要先行判断resolveActivity(getPackageManager()>0?你的操作:返回;
- 1:只有一个满足条件的app,会立即启动该app
- >1:当不只有一个app满足条件的时候,系统会默认选择一个列表,当然我们可以通过Intent.createChooser(),来做一些更有好的界面处理。
- 当我们决定让某些组件不允许通过显示意图来调用的时候,可显示的为配置文件中为该组件设置exported=false;
- 完整示例:
`Intent sendIntent = new Intent(Intent.ACTION_SEND);// Always use string resources for UI text.// This says something like "Share this photo with"String title = getResources().getString(R.string.chooser_title);// Create intent to show the chooser dialogIntent chooser = Intent.createChooser(sendIntent, title);// Verify the original intent will resolve to at least one activityif (sendIntent.resolveActivity(getPackageManager()) != null) { startActivity(chooser);}`
- 我们常用的系统提供的工具都为我们提供了完整Action\Data&DataType\Categary规则,它们通过使用<intent-filter>为整个系统的app调用自身功能提供了接口,具体的规则和示例请参阅文档https://developer.android.google.cn/guide/components/intents-common.html
Activity(周三)
- Activity的生命周期
- Activity的onSaveInsatnceState()和屏幕旋转
Service(周一)
- 特点:不十分准确的说,类似于一种没有UI的且运行在后台的Activity,默认运行在主线程中。
- 两种创建模式:
- startService()启动,stopslef()或者stopService()终止运行,即使当前应用已退出,也可长期运行在后台,不参与用户交互操作,运行完成则终止。
- bindService()绑定具体其他组件,与该组件通过IBinder接口进行通信,可以多个组件共同绑定同一Service对象,当该对象上的所有绑定对象全部解绑时终止运行。
- 绑定服务:可应用与同进程应用内部通信,单线程、多线程进程间通信(IPC)
- 在同进程的应用内部使用,可通过扩展Binder类实现。
- 在不同进程单线程操作队列使用能够,可直接使用Messenger+Hanlder来处理。
- 在不同进程多线程操作,需要使用AIDL来处理。
- IBinder:进程间通信的桥梁和信息载体,无论是那种绑定的通信方式,都需要通过服务前端的onBind()方法返回的IBinder对象来关联两个通信双方,客户端则通过ServicerConnection接口回调来处理IBinder所携带的信息。
- AIDL:多进程间的多线程通信语言
Content Provider
- 内容提供程序正对的是一组结构化的数据集,他们封装数据并提供定义数据安全性的机制;是连接一个进程与另一个进程之间的标准化界面。
App Widget
Broadcasts(周二)
- 注册方式:
- 静态注册:manifest<intent-filter></intent-filter>
- 动态注册:
- 注意事项:
- 不要在和启动Activity公用同一个Intent
- 在OnRecived()里面耗时操作的时候,注意使用goAsyn()或者JobScheduler
- 发送广播的三种方式:有序、群发、限定本地
- 广播的安全最佳实践:
- Processes and Application Life Cycle:系统会结合当前组件的进程等级以及内存等系统资源使用状况,决定是否主动销毁当前app components
- JobService&JobScheduler:JobService集成Service,通过绑定的方式重写了OnBind())实现AIDL,通过JobScheduler实现信息调度。需要注意的是默认情况下,他是运行在主线程中的后台程序,所以如需执行复杂耗时操作请开启异步线程。具体可以参考这篇博客,基本用法写的还算可以:http://blog.csdn.net/fishle123/article/details/50790894
- PendingResult:BroadCaseReceiver的状态值,是通过goAsyn()方法返回的,当完成的时候,必须调用finish()来通知系统OnReceived()方法执行完毕,让系统Process回收资源。
Process and Thread(周二)
- 默认情况下,Android是单进程多线程的应用机制:
- 在配置文件中可以为四大组件单独设置所要运行的进程,通常我们不需要这么做。实现同一应用内部存在多个进程运行组件的一对多的状态,
- 同时多个应用的组件也可以运行在同一进程中,前提是这些应用的Linux ID(沙盒机制的唯一标识)在各自的配置文件中是完全相同的并使用相同的签名证书,进而实现多对一的状态。
- 分类(按照权限等级由高到底):
- 前台进程:正在于用户交互的,例如:OnResume状态的Activity及绑定在该Activity上的Service,OnReceivd的BroadCastReceiver等等。
- 可见进程:对用户可见,但是不在交互状态,例如:OnPause状态的Activity
- 服务进程:除去上面两种状态的Service
- 不可见进程:对用不可见,例如:OnPause状态的Activity
- 空进程:用来加快组件加载速度的,起到缓存作用
- 线程:Android默认进程内的默认线程称作是主线程,因为其与widget和view包下的组件进行交互故有称作UI线程,默认同一进程内的操作都是在主线程进行的,但是耗时操作会阻塞UI线程,时间长了会到时ANR异常,所以就引出了工作线程,但是不能在工作线程中操作UI线程与widget和view包内控件的交互操作,愿意是UI线程制订了如下规则:
- 不能阻塞UI线程
- 不要再UI线程之外访问Android UI工具包(因为它是非线程安全的)
- 工作线程操作U工具包的方案:
- 主动调用Activity.runOnUiThread(Runable)
- View.post(Runable)
- View.postDelayed(Runable, long)
- Handler
- AsyncTask
0 0
- APIGuide_应用组件
- 应用组件
- 应用组件
- 应用组件
- Dictionary组件应用
- Jmail组件应用实例
- ASP组件应用实例
- aspjpeg组件的应用
- 工作流应用组件调研
- UI应用组件调研
- javaMail组件应用---------1
- javaMail组件应用---------2
- 应用IBTable组件
- 应用TIBDatabaseInfo组件
- 应用Web Service组件
- 应用WebSnap常用组件
- 应用数据库组件
- 应用访问控制组件
- AngularJS最理想开发工具WebStorm
- 数据库备份还原 quartz定时任务调度 自定义表单 java图片爬虫
- bcrypt使用报错-No callback function was given
- easyui tree 模仿ztree 使用扁平化加载json
- ip包格式说明
- APIGuide_应用组件
- uva 10626Buying Coke
- HBase WAL机制
- 二维灰度地形图山脊线自动提取方法整理(最小生成树)
- hdu 1269 迷宫城堡 判断图是否强连通
- Android安全攻防战,反编译与混淆技术完全解析(下)
- 搭建yarn方式管理hadoop2.x
- Application 启动速度优化
- shell wc