1.依赖
dependencies {
//对于自身目录使用的fileTree
implementation fileTree(dir: 'libs', include: ['*.jar'])
//对于其他的module使用的就是project字段,而:表示的是文件目录内核自己相同层级的module
implementation project(":base")
}
2.Application的替换问题。
①如果功能module有Application,主module没有自定义的Application,这时会自然引用功能module中Application。
②如果主module有自定义的Application,其他module没有,那么自动引入主module的Application。
③如果功能module中有两个自定义Application,在解决冲突后,Application会载入编译后module的Application。
④如果主module中有自定义的Application,其他module中也有自定义的Application,在解决冲突后,最后编译的主module中Application会在AndroidManifest中。
对于Application的声明的重复的权限,在合并的时候,会自动去重。
3.使用SharedUserId
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.base"
android:sharedUserId="com.xxx">
</manifest>
通过声明相同的SharedUserId,拥有同一个UserId的多个App能运行到同一个进程中,所以默认可以互相访问任意的数据。
如果是在功能module中功能清单中声明ShareUserId,那么最终的AndroidManifest并不会将这个功能module的shareUserId放在其中。
只有主module的AndroidManifest中声明后才有用。
https://www.cnblogs.com/zhangxia/p/4952739.html
重要的是在一个app访问另外一个App的内容的时候,需要通过包名获取其相对应的context,然后通过这个context进行获取数据。
Context ct = this.createPackageContext("com.example.androidstudiotest3", Context.CONTEXT_IGNORE_SECURITY);
3.activity的启动流程
会发现当从MainActivity启动Main2Activity的时候,首先调用MainActivity的onPause()方法,并不会立即调用onStop()方法,而是在Main2Activity创建完毕后,才会调用MainActivity的onStop()方法。
启动MainActivity
onActivityCreated==activity==MainActivity
onActivityStarted==activity==MainActivity
onActivityResumed==activity==MainActivity
从MainActivity启动Main2Activity
onActivityPaused==activity==MainActivity
onActivityCreated==activity==Main2Activity
onActivityStarted==activity==Main2Activity
onActivityResumed==activity==Main2Activity
onActivitySaveInstanceState==activity==MainActivity
onActivityStopped==activity==MainActivity
销毁Main2Activity
onActivityPaused==activity==Main2Activity
onActivityStarted==activity==MainActivity
onActivityResumed==activity==MainActivity
onActivityStopped==activity==Main2Activity
onActivityDestroyed==activity==Main2Activity
销毁MainActivity
onActivityPaused==activity==MainActivity
onActivityStopped==activity==MainActivity
onActivityDestroyed==activity==MainActivity
4.Application的一些方法
//终止应用程序对象时调用,不保证一定被调用,当
@Override
public void onTerminate() {
super.onTerminate();
Log.e("TAG", "onTerminate====");
}
//当后台程序终止且资源还匮乏时会调用这个方法,应该在这里释放一些资源
@Override
public void onLowMemory() {
super.onLowMemory();
Log.e("TAG", "onLowMemory====");
}
/**
* TRIM_MEMORY_COMPLETE,
* TRIM_MEMORY_MODERATE,
* TRIM_MEMORY_BACKGROUND,
* TRIM_MEMORY_UI_HIDDEN, 一般返回这个
* TRIM_MEMORY_RUNNING_CRITICAL,
* TRIM_MEMORY_RUNNING_LOW,
* TRIM_MEMORY_RUNNING_MODERATE,
*/
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
Log.e("TAG", "onTrimMemory====" + level);
}
//配置改变时触发这个方法,比如屏幕旋转
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e("TAG", "onConfigurationChanged====");
}
5.application中注册activity的生命周期监听,能够获取到每个activity的创建销毁过程。可以使用Stack收集所有的activity对象,并操作activity对象。
在application的onCreate()方法中进行注册
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
private ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Log.e("TAG", "onActivityCreated==activity==" + activity.getLocalClassName());
}
@Override
public void onActivityStarted(Activity activity) {
Log.e("TAG", "onActivityStarted==activity==" + activity.getLocalClassName());
}
@Override
public void onActivityResumed(Activity activity) {
Log.e("TAG", "onActivityResumed==activity==" + activity.getLocalClassName());
}
@Override
public void onActivityPaused(Activity activity) {
Log.e("TAG", "onActivityPaused==activity==" + activity.getLocalClassName());
}
@Override
public void onActivityStopped(Activity activity) {
Log.e("TAG", "onActivityStopped==activity==" + activity.getLocalClassName());
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Log.e("TAG", "onActivitySaveInstanceState==activity==" + activity.getLocalClassName());
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.e("TAG", "onActivityDestroyed==activity==" + activity.getLocalClassName());
}
};