APIGuide_应用组件

APIGuide_应用组件

Intent和Intent Filter(周二)

  • Intent是一个消息传递对象。
  • 分类
    1. 显示Intent(限定了完整类名),没有特殊要求最好使用显示Intent
    2. 隐式Intent:不指定特定的组建名称,至声明操作内容。
  • 系统识别意图的依据:Action\Data&DataType\Categary
  • <intent-filter>:当使用隐式Intent时,可以为组件声明意图过滤器,来约束当前组件需要满足的意图条件,这意味着只要有应用显示的调用含有该意图过滤器的组件,同时他满足了上面识别意图的三个标识,则可达到启动该组件的目的。例如:在淘宝app中启动天猫app展示天猫商店商品。但需要注意当我们通过显示意图调用潜在的隐式意图app时,如果符合意图过滤器的组建个数不同,需要处理的手段也不同:
    1. 0:没有满足的组件,调用应用会崩溃,所以所有类似调用方式都需要先行判断resolveActivity(getPackageManager()>0?你的操作:返回;
    2. 1:只有一个满足条件的app,会立即启动该app
    3. >1:当不只有一个app满足条件的时候,系统会默认选择一个列表,当然我们可以通过Intent.createChooser(),来做一些更有好的界面处理。
    4. 当我们决定让某些组件不允许通过显示意图来调用的时候,可显示的为配置文件中为该组件设置exported=false;
    5. 完整示例:

   `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 dialog
Intent chooser = Intent.createChooser(sendIntent, title);

// Verify the original intent will resolve to at least one activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(chooser);
}`

Activity(周三)

  • Activity的生命周期
  • Activity的onSaveInsatnceState()和屏幕旋转

Service(周一)

  • 特点:不十分准确的说,类似于一种没有UI的且运行在后台的Activity,默认运行在主线程中。
  • 两种创建模式:
    1. startService()启动,stopslef()或者stopService()终止运行,即使当前应用已退出,也可长期运行在后台,不参与用户交互操作,运行完成则终止。
    2. bindService()绑定具体其他组件,与该组件通过IBinder接口进行通信,可以多个组件共同绑定同一Service对象,当该对象上的所有绑定对象全部解绑时终止运行。
  • 绑定服务:可应用与同进程应用内部通信,单线程、多线程进程间通信(IPC)
    1. 在同进程的应用内部使用,可通过扩展Binder类实现。
    2. 在不同进程单线程操作队列使用能够,可直接使用Messenger+Hanlder来处理。
    3. 在不同进程多线程操作,需要使用AIDL来处理。
  • IBinder:进程间通信的桥梁和信息载体,无论是那种绑定的通信方式,都需要通过服务前端的onBind()方法返回的IBinder对象来关联两个通信双方,客户端则通过ServicerConnection接口回调来处理IBinder所携带的信息。
  • AIDL:多进程间的多线程通信语言

Content Provider

  • 内容提供程序正对的是一组结构化的数据集,他们封装数据并提供定义数据安全性的机制;是连接一个进程与另一个进程之间的标准化界面。

App Widget

Broadcasts(周二)

  • 注册方式:
    1. 静态注册:manifest<intent-filter></intent-filter>
    2. 动态注册:
  • 注意事项:
    1. 不要在和启动Activity公用同一个Intent
    2. 在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是单进程多线程的应用机制:
    1. 在配置文件中可以为四大组件单独设置所要运行的进程,通常我们不需要这么做。实现同一应用内部存在多个进程运行组件的一对多的状态,
    2. 同时多个应用的组件也可以运行在同一进程中,前提是这些应用的Linux ID(沙盒机制的唯一标识)在各自的配置文件中是完全相同的并使用相同的签名证书,进而实现多对一的状态。
  • 分类(按照权限等级由高到底):
    1. 前台进程:正在于用户交互的,例如:OnResume状态的Activity及绑定在该Activity上的Service,OnReceivd的BroadCastReceiver等等。
    2. 可见进程:对用户可见,但是不在交互状态,例如:OnPause状态的Activity
    3. 服务进程:除去上面两种状态的Service
    4. 不可见进程:对用不可见,例如:OnPause状态的Activity
    5. 空进程:用来加快组件加载速度的,起到缓存作用
  • 线程:Android默认进程内的默认线程称作是主线程,因为其与widget和view包下的组件进行交互故有称作UI线程,默认同一进程内的操作都是在主线程进行的,但是耗时操作会阻塞UI线程,时间长了会到时ANR异常,所以就引出了工作线程,但是不能在工作线程中操作UI线程与widget和view包内控件的交互操作,愿意是UI线程制订了如下规则:
    1. 不能阻塞UI线程
    2. 不要再UI线程之外访问Android UI工具包(因为它是非线程安全的)
  • 工作线程操作U工具包的方案:
    1. 主动调用Activity.runOnUiThread(Runable)
    2. View.post(Runable)
    3. View.postDelayed(Runable, long)
    4. Handler
    5. AsyncTask

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值