欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

App的初始化思路

程序员文章站 2022-05-02 12:13:42
...

1、在Example这个类中进行初始化,但是初始化的具体操作不是在这个类里面,要是都在这个类里面弄的话,代码量太多了,而是具体写一个对外的工具类Latte,在这个类里面进行具体的初始化操作。而这个Latte类只是写了init()方法,具体用到的类型都是写在Configurator这个类中。
所以可以把整个初始化过程看成:
Example调用Latte的init()方法,Latte的init()方法用到Configurator类
这样做的好处是其他业务的module也可以引用它。Example这个类中具体代码是:

public class ExampleApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Latte.init(this)
                .withIcon(new FontAwesomeModule())
                .withIcon(new FontEcModule())
                .withApiHost("http://127.0.0.1")
                .configure();
    }
}

这个方法中通过调用Latte.init().configure()进行最基本的初始化。(configure是Configurator的一个完成配置的函数)

.withIcon(new FontAwesomeModule())
.withIcon(new FontEcModule())
.withApiHost("http://127.0.0.1")

这些是字体以及网络的初始化,以后想初始化其他的都需要用with开头的函数就可以,当然with开头的函数都需要写在Configutaror类中。(因为Latte的init()方法用到Configurator类)
Latte中的init()方法

public final class Latte {
    public static Configurator init(Context context){
         getConfigurations().put(ConfigType.APPLICATION_CONTEXT.name(),context.getApplicationContext());
        return Configurator.getInstance();
    }
    private static HashMap<String,Object> getConfigurations(){
        return Configurator.getInstance().getLatteConfigs();
    }

    public static Context getApplication(){
        return (Context)getConfigurations().get(ConfigType.APPLICATION_CONTEXT.name());
    }

可以看出init中调用了一些本类的方法,也用到了Configurator的类,然后就是在Configurator中写入一些关于初始的类。这里就不写了。(自己去AS中找吧)
反正特么的写完了也不会看。感觉自己就是个垃圾,写了那么多博客,花费了那么多时间,到头来也不看,也不相信自己写的,也看不懂自己写的。写的时候开心的要死,过后就看不懂了。真心觉得自己就是个垃圾,根本不适合学计算机,简直笨的要死。这个脑子真的笨的要死。要是别人像我这样认真,早就好学校好工作了。我这个笨脑子付出再多努力都白费。蠢!!!

关于Android的Application类
一、关于对Application的理解
(1)每个APP都有一个Application实例:如果我们没有继承Application子类自定义它的话,APP会创建一个默认的实例。
(2)Application实例拥有着与APP一样长的生命周期:在APP开启的时候首先就会实例化它,然后才是入口的Activity或者Service等。
(3)Application与APP“同生共死”,在一个APP的生命周期只实例化一次,所以它“天生”就是一个单例,不需要使用单例模式去实现它。
而上面的官方Note里面说到,通常是没有必要实现Application的子类的,要用单例的话可以自己使用静态单例类实现,要用它的Context的话用Context.getApplicationContext()就行了。
二、
onCreate()方法
在Application创建的时候调用,一般用于初始化一些东西,如全局的对象,环境的配置等。
三、关于Application的使用
要使用自定义的Application,首先就是要自己新建一个Application的子类,然后把它的名字写在manifest文件里面的application标签里的android:name属性就行,如我的Application子类名字是ExampleApp,则:

<application
        android:name=".ExampleApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

1.初始化资源
由于Application类是在APP启动的时候就启动,启动在所有Activity之前,所以可以使用它做资源的初始化操作,如图片资源初始化,WebView的预加载,推送服务的注册等等,注意不要执行耗时操作,会拖慢APP启动速度。
2.数据全局共享
可以设置一些全局的共享常量,如一些TAG,枚举值等。
可以设置一些全局使用的共享变量数据,如一个全局的Handler等等,但是要注意,这里缓存的变量数据的作用周期只在APP的生命周期,如果APP因为内存不足而结束的话,再开启这些数据就会消失,所以这里只能存储一些不重要的数据来使数据全APP共享,想要储存重要数据的话需要SharePreference、数据库或者文件存储等这些本地存储。
可以设置一些静态方法来让其他类调用,来使用Application里面的全局变量,如实现APP一键退出功能时候会用到。

相关标签: 项目