Android的Activity四种启动模式
standard
activity的默认启动模式。在同一个任务栈中可存在多个activity实例。
singleTop
若某个任务栈的栈顶存在activity A,此时又有相同的activity A被启动在此任务栈中,则不会再重新创建新的实例,而是复用栈顶的activity A的实例。并通过onNewInstant()方法将intent对象传递到该实例。
singleTask
若某个人物栈中已经有activity A,若再一次有activity A加入这个任务栈,则会移除该任务栈 activity A上面的其他任务,复用activity A。
singleInstance
总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同一时刻在系统中只会存在一个这样的
- 以singleInstance模式启动的Activity具有全局唯一性,即整个系统中只会存在一个
这样的实例- 以singleInstance模式启动的Activity具有独占性,即它会独自占用一个任务,被他
开启的任何activity都会运行在其他任务中(官方文档上的描述为,singleInstance模式的Activity不允许其他Activity和它共存在一个任务中)- 被singleInstance模式的Activity开启的其他activity,能够开启一个新任务,但不一定开启新的任务,也可能在已有的一个任务中开启
相关的东东: taskAffinity
可指定要启动的,launchmode为singleTask的activity的任务栈的地方。
原文参考:https://blog.csdn.net/zhangjg_blog/article/details/10923643
实战演练
截图点击分享时,如果一直截图一直分享,由于启动模式是默认启动模式,这种场景下会在当前任务栈一直创建activity。那么此时只需设定当前的分享界面的启动模式为 singleTask,并且指定taskAffinity为我们应用的包名,即可。
设计模式第一章 —— 6大原则
- 单一职责原则(Single Responsibility Principle):
There should never be more than one reason for a class to change.
即就一个类而言,应该只专注于做一件事和仅有一个引起其变化的原因。
- 里氏替换原则 (Liskov Substitution Principle):
只要弗雷能够出现地地方子类就可以出现,而且替换成子类 也不会发生任何错误或异常。使用者根本不需要知道父类还是子类;但是反过来则不可以,有子类的地方,父类未必就适应。
- 依赖倒置原则 (Dependence Inversion Principle):
高层模块不应该依赖底层模块,两者都应该依赖抽象
抽象不依赖细节
细节应该依赖于抽象
- 接口隔离原则 (Interface Segregation Principle):
客户端不应该依赖它不需要的接口
类间的依赖关系应该建立在最小的接口上
- 迪米特法则 (Law of Demeter):
每个软件单位对其他的单位都只有最少的了解,这些了解仅限于那些与本单位密切
相关的软件单位
- 开闭原则 (Open Closed Principle):
一个软件应该对扩展开放,对修改关闭。
网友评论