Application
Android的一大组件,在App运行过程中有且仅有一个Application对象贯穿应用的整个生命周期。打开AndroidManifest.xml,发现activity节点的上级正是application节点,不过该节点并未指定name属性,此时App采用默认的Application实例。
Manifest中application属性requestLegacyExternalStorage
当应用程序在 Android 10(API级别29)及更高版本上运行时,默认情况下,它无法访问外部存储中的文件。这是由于Android 10引入了一种新的存储权限模型,称为Scoped Storage(作用域存储)。Scoped Storage对应用程序的文件访问进行了更严格的限制,以提高用户数据的安全性和隐私性。
然而,如果你的应用程序以较早的Android版本为目标,并希望继续在Android 10及更高版本上访问外部存储中的文件,你可以在AndroidManifest.xml文件中的标签中添加以下属性:
<application
...
android:requestLegacyExternalStorage="true">
...
</application>
这个属性告诉系统,你的应用程序仍然使用旧的外部存储权限模型,而不是Scoped Storage。这样,你的应用程序将能够在Android 10及更高版本上继续访问外部存储中的文件。
请注意,这只是一个临时解决方案。在将来的Android版本中,Scoped Storage将成为唯一的存储权限模型,而 android:requestLegacyExternalStorage 属性将不再起作用。因此,建议在可能的情况下,迁移到Scoped Storage模型。
问题
android9系统默认禁止http协议,即禁止明文传输,必须使用https来通讯。而工程中,可能还有一些地方使用http,怎么让android9也能使用http呢?
答案:
在AndroidManifest.xml的application节点中添加如下一条属性:
android:usesCleartextTraffic="true"
是否允许备份应用的数据,默认是true,当备份数据的时候,它的数据会被备份下来。如果设为false,那么绝对不会备份应用的数据,即使是备份整个系统。
<application android:allowBackup="false">
声明你的application是否愿意支持从右到左(原来RTL就是right-to-left 的缩写…)的布局
android:supportsRtl="true"
注意,如果你使用的android sdk版本不是23或以上的(即android6以上),配置这条usesCleartextTraffic会导致编译失败,提示这个属性未定义
配置文件相比与java文件的好处,配置文件在执行时并没有进行编译。而java文件需要编译成为.class文件才可以运行。
元数据 meta_data :这个数据在AndroidManifest中,我们在引用第三方的SDK时,对方可能会将一些数据放在其中。比如说token。
Application生命周期
- onConfigurationChanged( ) :在配置被改变时触发 。
- onCreate() :在程序创建时创建。
- onLowMemory() :内存不够时触发。
- onTerminate() :当终止程序时调用 但是不能保证一定调用
- onTrimMemory() :在内存清理时触发
public class MyApplication extends Application {
private static String TAG = "JJWorld.MyApplication";
@Override
public void onCreate() {
super.onCreate();
Log.i(TAG,"MyApplication onCreate");
Log.i(TAG,"process myUid:" + Process.myUid() + " myPid:"+Process.myPid());
}
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.i(TAG,"MyApplication onConfigurationChanged");
}
@Override
public void onTerminate() {
super.onTerminate();
Log.i(TAG,"MyApplication onTerminate");
}
@Override
public void onLowMemory() {
super.onLowMemory();
Log.i(TAG,"MyApplication onLowMemory");
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
Log.i(TAG,"MyApplication onTrimMemory");
}
}