去年使用反射实现过一种一行代码实现开屏广告。由于是基于反射,如果各个系统版本Api、变量名、各机型ROM、有更改还得适配比较麻烦,存在不稳定性。因此再介绍一种基于原生API方式。
InjectSplashGlobally
是一个全局注入SplashActivity
界面框架,一行代码使用,内部使用原生API,各个版本之间无差异,稳定高效。
其原理是监听app生命周期,前后台切换,通过application.registerActivityLifecycleCallbacks
即可。
通过监听其亮屏熄屏广播startActivity(xxActivity.class)
跳转到xxActivity.class
- 开屏界面
- 再进程存活的情况下从后台进入前台注入开屏界面
- 再进程存活的情况下锁屏再亮屏进入开屏界面
implementation 'com.xwdz:InjectSplashGlobally:0.0.1'
在应用程序的Application#onCreate初始化即可。
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
// 第二个参数指定为你自定义的开屏界面xxx.class
SplashGlobally.inject(this, WelcomeActivity.class);
}
}