继承Application管理生命周期

继承Application实现Android数据共享

http://www.jianshu.com/p/75a5c24174b2

jessyan提出一个思路,用Application + 接口来管理扩展每个activity的生命周期

这个接口有什么用呢?

Application 提供有一个 registerActivityLifecycleCallbacks() 的方法,需要传入的参数就是这个 ActivityLifecycleCallbacks 接口,作用和你猜的没错,就是在你调用这个方法传入这个接口实现类后,系统会在每个 Activity 执行完对应的生命周期后都调用这个实现类中对应的方法,请记住是每个!

这个时候我们就会想到一个需求实现,关闭所有 Activity !你还在通过继承 BaseActivityBaseActivityonCreate 中将这个 Activity 加入集合???

那我现在就告诉你这样的弊端,如果你 App 中打开有其他三方库的 Activity ,这个三方库肯定不可能继承你的 BaseActivity ,这时你怎么办?怎么办?

这时 ActivityLifecycleCallbacks 就派上用场了, App 中的所有 Activity 只要执行完生命周期就一定会调用这个接口实现类的对应方法, 那你就可以在 onActivityCreated 中将所有 Activity 加入集合,这样不管你是不是三方库的 Activity 我都可以遍历集合 finish 所有的 Activity

现在就按照他给的思路实现toolbar

首先定义toolbar的xml,我用了v7的toolbar

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:layout_gravity="top"
    android:background="?attr/colorPrimary"/>

使用toolbar

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout = "@layout/app_toolbar"/>

</LinearLayout>

继承application,重写接口

public class LApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                if (activity.findViewById(R.id.toolbar) != null) {
                    if (activity instanceof AppCompatActivity) {
                        Toolbar toolbar = (Toolbar) activity.findViewById(R.id.toolbar);
                        ((AppCompatActivity) activity).setSupportActionBar(toolbar);
                        ((AppCompatActivity) activity).getSupportActionBar().setDisplayShowTitleEnabled(false);
                        toolbar.setTitle(activity.getTitle().toString());
                    }
                }
            }
    }
}

这样在activity的super.oncreate时就会调用application的这段代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        super.onCreate(savedInstanceState);
    }
}

所以这里要注意先setContentView再调用super.onCreate

最后设置application

<application android:name=".LApplication"

完成效果:

时间: 2024-10-13 22:45:26

继承Application管理生命周期的相关文章

tomcat生命周期的管理——生命周期统一接口Lifecycle

我们知道Tomcat的架构设计是清晰的.模块化的,其拥有很多组件,假如我们要启动Tomcat,可以一个一个启动组件,但这样启动有很多缺点,不仅麻烦,而且容易漏了组件启动,还会对后面动态组件扩展带来麻烦.难不成真要我们一个一个启动吗?其实未必,Tomcat的设计者提供了一个解决方案:用Lifecycle管理启动.停止.关闭. 从第一节的架构图可以看到各个核心组件有包含与被包含的关系,例如Server<-Service<-Container和Connector,最大的是Server,往下一层层包含

[03] Servlet继承关系和生命周期

1.Servlet的继承关系 假如现有我们自定义的一个Servlet,继承HttpServlet,那么实际上它的继承链如下图: 可以看到,核心的部分在于: 两个顶级接口 Servlet ServletConfig 接口的实现类 GenericServlet 基于HTTP协议的实现类 HttpServlet 我们剥离一下,把不需要看的去掉,再把方法显示一下,可清晰知道Servlet的整体继承关系如下: 其中重点摘录部分进行说明: ServletConfig  Servlet的配置信息,常用来在Se

Application的生命周期

1 package com.example.metrox.l13; 2 3 import android.app.Application; 4 import android.content.res.Configuration; 5 import android.provider.Settings; 6 7 /** 8 * Created by MetroX on 2016/6/13. 9 */ 10 public class App extends Application { 11 privat

React 源码剖析系列 - 生命周期的管理艺术

目前,前端领域中 React 势头正盛,很少能够深入剖析内部实现机制和原理. 本系列文章 希望通过剖析 React 源码,理解其内部的实现原理,知其然更要知其所以然. 对于 React,其组件生命周期(Component Lifecycle)是它的核心概念,本文从源码入手,来剖析 React 生命周期的管理艺术. 阅读本文需要对 React 有一定的了解,如果你不知何为组件的生命周期,请详读 React 生命周期的文档. 如果你对 React 组件的生命周期存在些许疑惑,如生命周期如何顺序管理:

构造函数的选择与服务生命周期管理

构造函数的选择与服务生命周期管理 ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationInstance和ImplementationFactory属性均为Null,那么ServiceProvider最终会利用其ImplementationType属性返回的真实类型选择一个适合的构造函数来创建最终的服务实例.我们知道服务服务的真实类型可以定义了多个构造函

Spring Bean 生命周期

转自:也谈Spring Bean的生命周期 开篇先用一张老图描述下Spring中Bean容器的生命周期. 插叙一下,记得某个博文中提到:“Spring的Bean容器只管理非单例Bean的生命周期,单例Bean的生命周期不在管理范围内”,其实我认为这句话恰好说反了.首先明确一点,并非Spring容器中所有的Bean都有生命周期行为,只有接受容器管理生命周期的Bean才具有生命周期行为:而单例(Singleton)Bean接受容器管理,非单例(non-singleton)Bean在实例化后,完全交给

关于React的生命周期

React 的主要思想是通过构建可复用组件来构建用户界面.所谓组件其实就是 有限状态机,通过状态渲染对应的界面,且每个组件都有自己的生命周期,它规定了组件的状态和方法需要在哪个阶段进行改变和执行.有限状态机(FSM),表示有限个状态以及在这些状态之间的转移和动作等行为的模型.一般通过状态.事件.转换和动作来描述有限状态机.React 通过管理状态来实现对组件的管理. 虽然组件.状态机.生命周期这三者都不是 React 独创,如果熟悉 Web Components 标准,它与其中的自定义组件的生命

Android Fragment 生命周期及其API使用

Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach(Activity)当Fragment与Activity发生关联时调用.onCreateView(LayoutInflater, ViewGroup,Bundle)创建该Fragment的视图onActivityCreated(Bundle)当Activity的onCreate方法返回时调用onDestoryView()与onCrea

JavaWEB 通过Listener理解域对象生命周期

利用 ServletRequestListener.HttpSessionListener 以及 ServletContextListener 可以把request,session,以及Application的生命周期进一步的做一了解 > request:是一个请求,当一个响应返回时,即被销毁.当发送一个请求时被创建.注意:请求转发的过程是 一个 request 对象. 注:在页面上放的 属性 ,在servlet中时获取不到的,因为页面响应后request已经销毁了. 注:重定向是两个请求. >