Android程序猿

Activity四种启动模式?

2020-06-19  本文已影响0人  行者_zm

Activity的启动模式指,可以根据实际开发需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题。

1)standard

standard为Activity的默认启动模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。(点back键会依照栈顺序依次退出)

2)singleTop

singleTop模式下,Activity可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

3)singleTask

singleTask表示只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

4)singleInstance

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

BraodcastReceiver:

普通广播(Normal Broadcast)
有序广播(Ordered Broadcast)
粘性广播(Sticky Broadcast)
系统广播(System Broadcast)
本地广播(Local Broadcast)

使用了设计模式中的观察者模式:基于消息的发布/订阅事件模型。

注册的方式分为两种:静态注册、动态注册

ContentProvider:
ContentProvider为不同的应用之间实现数据共享,提供统一的接口,也就是说ContentProvider可以实现进程间的数据共享,实现跨进程通信
首先我们需要知道三个类

ContentProvider(内容提供者)
ContentResolver(内容解析者)
ContentObserver(内容观察者)
假如我们现在有个应用A 提供了数据 ,应用B要操作应用A的数据,那么

应用A使用ContentProvider去共享自己数据
应用B使用ContentResolver去操作应用A的数据,通过ContentObserver去监听应用A的数据变化
当应用A的数据发送改变时,通知ContentObserver去告诉应用B数据变化了及时更新

外界可以通过ContentResolver接口来访问ContentProvider(内容提供者)中的数据。Uri 通用资源标志符(Universal Resource Identifier)Uri代表要操作的数据,Android中可用的每种资源 - 图像、视频片段等都可以用Uri来表示。ContentProvider共享数据是通过定义一个对外开放的统一的接口来实现的。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Context提供的getContentResolver()方法。
IntentService:

IntentService是Service的子类,比普通的Service增加了额外的功能。IntentService会创建独立的worker线程来处理所有的Intent请求;会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程的问题;所有请求处理完成后,IntentService会自动停止,开发者无需手动调用stopSelf()方法停止Service;

上一篇 下一篇

猜你喜欢

热点阅读