为了账号安全,请及时绑定邮箱和手机立即绑定

Android 四大组件简单介绍

标签:
Android

四大组件+Intent(四大组件的通信):

1、Activity

一个界面对应一个Activity

2、Broadcast

广播(电话)

3、Services

无界面,相应时间长(下载/后台听歌)

4、ContentProvider

权限相关

Android中View类

1、View树

ViewGroup(LinearLayout/RelativeLayout/AbsolateLayout/FrameLayout/TableLayout)

   ViewGroup View View

View    View 

2、View分类

TextView

ImageView

KeyboardView

ProgressBar

SurfaceView

ViewGroup

3、定义多Activity步骤

----定义Activity类+layout布局文件

----在manifest中生命类

----定义Intent对象

----通过intent启动activity

4、本地持久化(例如记住密码)

小文本内容:sharedpreference

不规则文件:文件系统存储

有关系,复杂:SQLite(联系人)

5、网络访问:

http

urlConn

-------------------------------------------------

2016/7/14

1. Activity的四种启动模式(可以在manifest中launchMode控制或者intent.addFlags)

a. 标准模式(默认): 调用startActivity即可产生一个新的实例

若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……

点back键会依照栈顺序依次退出。

b. singleTop:如果已经有一个实例位于Activity栈顶部,就

不产生新的实例,而是调用该Activity的onNewInstance

如果不位于栈顶,则产生新的实例

c. singleTask:在新的task产生实例,以后每次调用就用这个实例

同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法

如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,

也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

singleTask会把task中在其之上的其它Activity destory掉。

d. singleInstance:在activity的task中产生新的实例

只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

Service

a. Service是在一段不定的时间运行在后台,不和用户交互应用组件。

b. 每个Service必须在manifest中 通过<service>来声明。可以通过contect.startservice和contect.bindserverice来启动。

c. Service和其他的应用组件一样,运行在进程的主线程中。这就是说如果service需要很多耗时或者阻塞的操作,需要在其子线程中实现。

Service的2中模式:

1. startService()/ stopService():(调用者和服务没有关联,需要显示调用stopService关闭服务)

用于应用程序内部服务:用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。

调用生命周期:context.startService() ->onCreate()- >onStart()(可能被多次调用)->Service running

      context.stopService() | ->onDestroy() ->Service stop

2. bindService()/ unBindService()(调用者和服务关联,调用者一旦退出,服务自动关闭)

用于android系统内部应用程序之间。比如调用天气服务,短信服务等,可以被其他应用程序复用

它可以通过自己定义并暴露出来的接口进行程序操作。客户端建立一个到服务对象的连接,并通过那个连接来调用服务。

调用生命周期:context.bindService()->onCreate()->onBind()->Service running

      onUnbind() -> onDestroy() ->Service stop

启动service,根据onStartCommand的返回值不同,有两个附加的模式:

1. START_STICKY 用于显示启动和停止service。

  2. START_NOT_STICKY或START_REDELIVER_INTENT用于有命令需要处理时才运行的模式。

BroadCast Receiver

用于异步接收广播Intent。主要有两大类,用于接收广播的:

1. 正常广播 Normal broadcasts用 Context.sendBroadcast()发送,完全异步

2. 有序广播 Ordered broadcasts(用 Context.sendOrderedBroadcast()发送)每次被发送到一个receiver

  Broadcast Receiver 并没有提供可视化的界面来显示广播信息。

可以使用Notification和Notification Manager来实现可视化的信息的界面,显示广播信息的内容,图标及震动信息

注册Receiver

1. 静态注册:在AndroidManifest.xml的application里面定义receiver并设置要接收的action。

2. 动态注册:在activity里面调用函数来注册,和静态的内容差不多。一个形参是receiver,另一个是IntentFilter

     Permission权限

   要接收某些action,需要在AndroidManifest.xml里面添加相应的permission。例如接收SMS:

一个receiver可以接收多个action的,即可以有多个intent-filter,需要在onReceive里面对intent.getAction(action name)进行判断。

   ps:个人推荐使用静态注册方式,由系统来管理receiver,而且程序里的所有receiver,可以在xml里面一目了然。而动态注册方式,隐藏在代码中,比较难发现。

      而且动态注册,需要特别注意的是,在退出程序前要记得调用Context.unregisterReceiver()方法。一般在activity的onStart()里面进行注册, onStop()里面进行注销。

    官方提醒,如果在Activity.onResume()里面注册了,就必须在Activity.onPause()注销。

ContentProvider:

主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。

ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

原文链接:http://www.apkbus.com/blog-831269-61117.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消