换肤状态栏会先变成灰色、切换Activity出现黑屏(关闭系统切换动画)
<!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>
主题配置如下
<style name="ActivityStyle" parent="Theme.AppCompat.Light.NoActionBar">
<!-- <item name="android:windowIsTranslucent">true</item>-->
<item name="android:windowBackground">@color/colorWhite</item>
<item name="android:windowAnimationStyle">@style/Animation</item>
<!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<style name="Animation">
<item name="android:activityOpenEnterAnimation">@null</item>
<item name="android:activityOpenExitAnimation">@null</item>
<item name="android:activityCloseEnterAnimation">@null</item>
<item name="android:activityCloseExitAnimation">@null</item>
<item name="android:taskOpenEnterAnimation">@null</item>
<item name="android:taskOpenExitAnimation">@null</item>
<item name="android:taskCloseEnterAnimation">@null</item>
<item name="android:taskCloseExitAnimation">@null</item>
<item name="android:taskToFrontEnterAnimation">@null</item>
<item name="android:taskToFrontExitAnimation">@null</item>
<item name="android:taskToBackEnterAnimation">@null</item>
<item name="android:taskToBackExitAnimation">@null</item>
</style>
Android崩溃后会重启activity,由于部分参数未初始化重复崩
public class CrashHandler implements UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
//发送消息通知情况Activity栈
//销毁当前进程
android.os.Process.killProcess(android.os.Process.myPid())
System.exit(0)
}
}
在开发过程中,想必你也一定遇到过这样的问题,当我们的应用发生Crash时异常退出,然后又自动启动跳转到未知页面,此时应用在崩溃前保存的全局变量被重置,用户状态丢失,显示数据错乱。更让我们头疼的是,这种崩溃后重启的情况,并不是每次都会遇到,那么究竟是因为什么呢?
经测试,在 Android 的 API 21 ( Android 5.0 ) 以下,Crash 会直接退出应用,但是在 API 21 ( Android 5.0 ) 以上,系统会遵循以下原则进行重启:
包含 Service,如果应用 Crash 的时候,运行着Service,那么系统会重新启动 Service。
不包含 Service,只有一个 Activity,那么系统不会重新启动该 Activity。
不包含 Service,但当前堆栈中存在两个 Activity:Act1 -> Act2,如果 Act2 发生了 Crash ,那么系统会重启 Act1。
不包含 Service,但是当前堆栈中存在三个 Activity:Act1 -> Act2 -> Act3,如果 Act3 崩溃,那么系统会重启 Act2,并且 Act1 依然存在,即可以从重启的 Act2 回到 Act1。
————————————————
版权声明:本文为CSDN博主「Juslt」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hnwx7880/article/details/85038057
关于加载fragment
implementation 'me.yokeyword:fragmentationx:1.0.2' //停止维护慎用
1.当点击时加载对应fragment
loadRootFragment(R.id.mainFragment,mainFragment);
2.加载的fragment界面复杂卡顿时先加载空白页
start(tempFragment);
start(targetFragment);
记录TabLayout + ViewPager2 + fragment 消息通知跳转对应tab,tab切换成功,Viewpager对应的fragment是默认0
推测时序导致的跳转后createFragment position为0
方案一:设置初始选中状态加载
方案二:收到消息记录选中的Index,在onResume中切tab
viewPager.setAdapter(new FragmentStateAdapter(this) {
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
});
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout, viewPager, true, true, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
}
}
});
tabLayoutMediator.attach();
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
tabLayout.selectTab(tabLayout.getTabAt(curNavIndex));
//方案二
public void onResume() {
super.onResume();
if (curNavIndex != tabLayout.getSelectedTabPosition()){
tabLayout.selectTab(tabLayout.getTabAt(curNavIndex));
}
}
网友评论