App的初始化思路
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一键退出功能时候会用到。
上一篇: **购买系统(26选5)-初级版本
下一篇: 04项目实战之飞机大战
推荐阅读