应用异常导致重新启动后Fragment布局发生重叠

471 篇文章 0 订阅
订阅专栏

二、分析问题

(1)从Application分析开始:

Application中添加了应用异常捕获并实现自动启动主界面的功能,CrashHandler用于异常的全局捕获:

import android.app.AlarmManager;

import android.app.PendingIntent;

import android.content.Context;

import android.content.Intent;

import android.os.Looper;

import android.util.Log;

import android.widget.Toast;

/**

  • Created by dingchao on 2018/3/23.

*/

/处理崩溃重叠/

public class UnCeHandler implements Thread.UncaughtExceptionHandler {

private Thread.UncaughtExceptionHandler mDefaultHandler;

public static final String TAG = “CatchExcep”;

MyApplication application;

public UnCeHandler(MyApplication application){

//获取系统默认的UncaughtException处理器

mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();

this.application = application;

}

@Override

public void uncaughtException(Thread thread, Throwable ex) {

if(!handleException(ex) && mDefaultHandler != null){

//如果用户没有处理则让系统默认的异常处理器来处理

mDefaultHandler.uncaughtException(thread, ex);

}else{

try{

Thread.sleep(2000);

}catch (InterruptedException e){

Log.e(TAG, "error : ", e);

}

Intent intent = new Intent(application.getApplicationContext(), FraOverActivity.class);

PendingIntent restartIntent = PendingIntent.getActivity(application.getApplicationContext(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

//退出程序

AlarmManager mgr = (AlarmManager)application.getSystemService(Context.ALARM_SERVICE);

mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1秒钟后重启应用

application.finishActivity();

}

}

/**

  • 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.

  • @param ex

  • @return true:如果处理了该异常信息;否则没有处理返回false.

*/

private boolean handleException(Throwable ex) {

if (ex == null) {

return false;

}

//使用Toast来显示异常信息

new Thread(){

@Override

public void run() {

Looper.prepare();

Toast.makeText(application.getApplicationContext(), “很抱歉,程序出现异常,即将退出.”, Toast.LENGTH_SHORT).show();

Looper.loop();

}

}.start();

return true;

}

}

界面发生重叠后输出后的日志信息:

//用于获取Activity存在的Fragment的数量

List list=getSupportFragmentManager().getFragments();

System.out.println(“Activity Fragment数量…”+list.size());

应用发生异常后又重新启动,从正常显示Activity到崩溃后重新启动onCreate执行了2次:

三、如果解决问题呢?

  • 我是这样想的,是否可以在执行Activity的onStop()或onDestroy()函数中执行Fragment销毁操作。

public void removeFragment(){

mFragmentTransaction = getSupportFragmentManager().beginTransaction();

if (mHomeFragment != null) {

mFragmentTransaction.remove(mHomeFragment);

}

if (mOtherFragment != null) {

mFragmentTransaction.remove(mOtherFragment);

}

if (mThirdFragment != null) {

mFragmentTransaction.remove(mThirdFragment);

}

mFragmentTransaction.commit();

}

如果在onDestroy()中执行Fragment销毁操作,但是出现异常后onDestroy并未执行,太失望了,如果重新启动又会出现Fragment重叠现象。

如果在onStop()中执行Fragment销毁操作,可以随便看看现象:

当栈顶Activity执行onCreate()那么栈顶下面的一个Activity会执行onPause()或onStop()函数,那么看看在onStop()销毁Fragment会有什么结果…还没有执行抛出异常操作就因为销毁Fragment而抛出异常,然后重新启动。这样是不可行的额,下面考虑其他方案。。。。。。

  • 在onSaveInstanceState()执行Fragment的保存,官方文档可查看Activity 生命周期

onSaveInstanceState(Bundle outState)函数中做存储实例状态:

invoked when the activity may be temporarily destroyed, save the instance state here 当Activity面临被销毁的情况下,进行存储一些对象的状态

onCreate(Bundle savedInstanceState)函数恢复实例状态:recovering the instance state 恢复实例状态

构思了…查看谷歌官方文档后有点启发了,我们可以在onSaveInstanceState()中保存应用将要奔溃时,最后一次显示的Fragment的标志或者Tag进行保存,在内存重启后,可以通过标志或者Tag进行恢复。

阅读了以上部分,你会感觉有点迷茫,ragment如何在Activity里面进行呈现,一开始就没有讲述,下面贴出代码了:

如何在Activity中,添加多个Fragment,我选择了操作Fragment的事务管理类(FragmentTransaction)并调用了add()、show()、hide()相关函数:

第一步:gradle文件中添加TabLayout组件的依赖库,方便进行Fragment的添加或者切换

dependencies {

//TabLayout依赖

implementation ‘com.android.support:design:29.0.0-alphal’

}

第二步:创建Fragment导航和Fragment容器FragmentLayout的布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”>

<FrameLayout

android:id=“@+id/frameLayout”

android:layout_width=“match_parent”

android:layout_height=“0dp”

android:layout_weight=“1.0” />

<com.google.android.material.tabs.TabLayout

android:id=“@+id/mytab”

android:layout_width=“match_parent”

android:layout_height=“60dp” />

第三步:进行Fragment的添加或者切换操作

分为:开始事务、隐藏所有Fragment、添加或者显示Fragment、提交事务

private String HOME_TAG = “0”, OTHER_TAG = “1”, THIRD_TAG = “2”;

private void switchFragment(int index) {

//第一步:开始事务

mFragmentTransaction = getSupportFragmentManager().beginTransaction();

//第二步:隐藏所有Fragment

hideFragment(mFragmentTransaction);

//第三步:添加或者隐藏Fragment

switch (index) {

case 0:

if (mHomeFragment == null) {

mHomeFragment = new HomeFragment();

mFragmentTransaction.add(R.id.frameLayout, mHomeFragment, HOME_TAG);

} else {

mFragmentTransaction.show(mHomeFragment);

}

break;

case 1:

if (mOtherFragment == null) {

mOtherFragment = new OtherFragment();

mFragmentTransaction.add(R.id.frameLayout, mOtherFragment, OTHER_TAG);

} else {

mFragmentTransaction.show(mOtherFragment);

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

我的面试经验分享可能不会去罗列太多的具体题目,因为我依然认为面试经验中最宝贵的不是那一个个具体的题目或者具体的答案,而是结束面试时,那一刻你的感受以及多天之后你的回味~

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》, 点击传送门即可获取!

【算法合集】

[外链图片转存中…(img-1s0MDn6Y-1711961877578)]

【延伸Android必备知识点】

[外链图片转存中…(img-4Kv0MIIt-1711961877578)]

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》, 点击传送门即可获取!
Android Fragment 切换时布局重叠/开发滑动广告Banner
seven的博客
08-27 6355
一.用Fragment模拟Tab页面,有时会发生切换时布局重叠问题,具体是当应用在后台运行时,设置更改语言选项或系统不小心强制关闭后,再进入应用会同时显示多个Tab内容,UI界面文字发生重叠。 这是因为再次回到这个app的时候,通过onCreate中的参数savedInstanceState恢复了之前的fragment。此时的FragmentTransaction中的相当于又再次add了frag...
android来回切换,Android解决多个fragment来回切换时布局重新实例化问题
weixin_28890941的博客
06-02 887
说明在我们开发过程中,一定会有这样的需求,就是主框架是MainActivity,然后里边嵌套多个fragment,来回切换,如果处理不好的话可能会产生多个fragment页面重叠,究其原因就是:当我们不退出软件,只是在后台挂着,去干别的事,当系统内存不足以回收我们这个app时,再切换回来这几个fragment页面就会重叠。replace()replace():当上一个fragment不再需要时,可...
Android Fragment重叠问题
何哥的博客
02-04 2760
前言:最近项目中用BottomNavigationView动态添加几个Fragment于FrameLayout中,bug就在我切换其他APP操作一会后,再回到当前APP,有很大概率出现fragment重叠的现象。 一、Fragment 重叠原因分析 切换到其他APP时,Android由于内存资源紧张,fragmen所在activity已经被销毁,但是保存了activity的状态
Android重新打开APP应用程序或activity后fragment 重叠问题
喂_balabala
04-11 2053
问题发生的场景: 屏幕旋转 activity被强杀后重启 应用在后台被挤出后重新打开 。。。 产生原因: FragmentState没有保存隐藏还是显示这个状态,当生命周期又走一次的时候又创建了一次fragment,所以导致重叠 解决方法1: (太low,不推荐使用。不能恢复重启前的界面) 直接在包含Fragment的Activity中复写onSaveInstanceState...
Android Fragment重叠,车机Fragment重叠 换肤或后台重启后重叠问题;
最新发布
Choi晨的博客
06-03 483
该车机在切换到后台后会回调 onSaveInstanceState 方法,再次打开时没有走onCreate方法,所以在onSaveInstanceState方法中把当前显示的fragment删除后,从后台切换回来就是空白页了;这样在Activity重启后会判断之前保存的是否有Fragment,有的话就把之前的隐藏就可以了;车机在换肤后(切换黑夜和白天模式)会回调 onSaveInstanceState 和 onCreate 方法,所以就从onCreate方法下手,下面是代码。
Android中的Fragment与ViewPager的搭配使用,有没有问题重叠问题,怎么解决
QYgujingjing的专栏
07-22 1213
Android中的Fragment与ViewPager的搭配使用,有没有问题重叠问题,怎么解决
Android通过hide&show管理多Fragment出现重叠以及点击穿透的解决之道
qq_43580100的博客
05-20 647
Fragment点击穿透 我目前项目的首页是一个MainActivity包含5个Fragment,通过hide&show来进行tab切换。在刚开始就遇到了一个很恶心的问题:当前Fragment页,点击能跳转到其他Fragment页的内容。具体来说就是不应该被点击的位置,出现了其它Fragment页面对应位置的点击事件。这个问题不是100%的复现的,而且有些机型不会出现,有些又很频繁 这个问...
[Android]Fragment 初探索|生命周期|懒加载|重叠解决
Ekko的博客
12-17 591
一、Fragment介绍 Fragment是在Android 3.0 (API level 11)开始引入的,它能让你的app在现有基础上性能大幅度提高,并且占用内存降低,同样的界面Activity占用内存比Fragment要多,响应速度Fragment比Activty在中低端手机上快了很多,甚至能达到好几倍,"单Activity + 多Fragment架构"和"多模块Activity + 多F...
android fragment 更新ui,Fragment建立动态UI
weixin_30026297的博客
05-27 854
创建Fragment可以把 Fragment 想象成 Activity 的模块,它拥有自己的生命周期、接收输入事件,可以在 Acvitity 运行过程中添加或者移除(有点像“子 Activity”,可以在不同的 Activity 里重复使用)。创建Fragment继承并创建 Fragment,然后在关键的生命周期方法中插入代码(就和在处理 Activity 时一样)。其中一个区别是:创建 Frag...
Android 应用多角度启动优化
zhuxingchong的博客
06-03 1291
一、简介 1.1、冷启动和热启动 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,然后再根据启动的参数,启动对应的进程组件,这个启动方式就是冷启动 热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动对应的进程组件,这个方式叫热启动 1.2、启动速度测量 1.2.1、TraceCompat TraceCo...
Fragment重叠解决方案
07-15
fragment重叠的完美解决方案
fragment依附的activity重启导致界面重叠的解决办法
攀山望月
04-29 666
项目中遇到一个问题:主activity中是fragment,在fragment中点击跳转到一个新的activity,新activity崩溃后app主activity重新onCreat,导致画面重叠 解决办法: 在
app在被系统释放后,重回前台Activity时,重建造成Fragment重叠
weixin_43843686的博客
09-16 433
我们知道,要使用Fragment的Activity必须继承v7的AppCompatActivity, 而AppCompatActivity继承自FragmentActivity 当我们的app退到后台被系统回收时,会触发我们的onSaveInstanceState方法, 而使用Fragment的Activity会调用到父类FragmentActivity的onSaveInstanceState方法...
android fragment 重叠问题
wangqiuwei07的专栏
11-05 328
重写方法onAttachFragment @Override public void onAttachFragment(Fragment fragment) { if (homeFragment == null &amp;&amp; fragment instanceof MainFragment) homeFragment = (MainFragm...
Activity被回收后,重建时Fragment重叠问题
newnewfeng的专栏
01-04 1876
如果是通过add方法加入到父布局中的,则在重建时需要从savedInstanceState获取到保存起来的fragment,而不能再创建一次,否则就会有重叠了。 @Override public void onActivityCreated(Bundle savedInstanceState) { if (null != savedInstanceState) { aF
android activity中使用fragment ,如果activity崩溃重启 那么会导致fragment会被清空掉(是数据清空,但是fragment依然存在)
sp_StudyAndoird的专栏
09-14 4127
具体清空如下:  1、 使用add,show,hide方式操作fragment  2、activity崩溃迅速重启,并且重启成功  这个时候 可以发现第一个fragment是OK的, 后面的fragment对象不为空,但是里面的数据没有了(我没有用savedInstanceState,不知道情况如何)。 分析:        当act重启的时候 fragment数据会被清空,猜测
android fragment 返回后重叠,Fragment的切换导致重叠
weixin_32009069的博客
05-27 626
刚接触fragment,之前在书上看的时候,由于它当时是加上了背景颜色,所以在切换的时候我没有去注意到重叠的问题。然后最近在做一个项目的时候用到fragment,才发现了这个问题。我用RadioGroup里的RadioButton来做切换package com.moke.activity;public class CJD_CardPackageActivity extends Activity i...
Android fragment隐藏和显示重叠问题解决(叠加显示)
weixin_37587365的博客
10-12 770
项目首页使用RadioGroup+RadioButton+Fragment实现页面切换,出现了一个问题fragment会出现重叠问题,就是一个fragment显示了两层,并不是必现问题。经过排查发现是项目主页面Activity被销毁重建了,但是之前的fragment对象没有被回收导致
Android: 处理因为Activity重建导致fragment叠加问题 (放基类)
baidu_24743861的博客
01-23 334
/** * 处理因为Activity重建导致fragment叠加问题 */ public void clearFragmentsBeforeCreate() { List<Fragment> fragments = getSupportFragmentManager().getFragments(); if (fragments.size() == 0){ return; } ...
写文章

热门文章

  • chrome浏览器,安装postman插件,实现json格式的接口测试 2242
  • 2024淘宝双十一快速刷金币工具 1669
  • FTP主动模式和被动模式! 1487
  • eureka技术分享 1356
  • 关于鸿蒙系统 JS UI 框架源码的分析(1) 1261

分类专栏

  • 程序员 471篇

最新评论

  • 几个SQL问题

    ha_lydms: 作者的写作风格非常独特,总能够吸引我不断地深入阅读。

  • PDF283页26个Java核心知识点,深入我心哪里不会学哪里,新技能get

    普通网友: 大佬的文章写的太精辟了 让我深刻了解了这篇文章的精髓 谢谢大佬分享,希望继续创作优质博文。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • Demo:第一章:Java实现比特币系统

    普通网友: 大佬的文章写的太精辟了 让我深刻了解了这篇文章的精髓 谢谢大佬分享,希望继续创作优质博文。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • List去除重复数据的五种方式

    普通网友: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,期待博主持续带来更多好文【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • ssm预先加载数据的四种方式

    普通网友: 这篇文章是优质之作,内容充实,结构明晰,语言流畅且通俗易懂,适合广大读者阅读。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

大家在看

  • STM32CubeMX生成main.c、main.h文件解读 169
  • Linux常用命令大全超详细知识点概览 1080
  • 计算机毕设-基于springboot的汽车租赁系统|汽车出租管理平台的设计与实现(附源码、lw、ppt)
  • 10.23学习
  • 每日OJ题_牛客_JZ79判断是不是平衡二叉树_C++_Java

最新文章

  • pulsar java IO生产消费消息
  • OpenKruise v0(1)
  • Netty——基本使用介绍
2024
05月 183篇
04月 288篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家主题玻璃钢卡通雕塑费用太湖石玻璃钢卡通雕塑生产海北玻璃钢雕塑商场美陈灵感玻璃钢雕塑怎么修补雕塑玻璃钢仿铜人物雕塑安阳玻璃钢浮雕学校抽象雕塑玻璃钢花盆简笔画表情南通玻璃钢雕塑诚信企业丽水玻璃钢雕塑地址名人玻璃钢卡通雕塑现货玻璃钢七星瓢虫雕塑增城玻璃钢造型雕塑平凉玻璃钢雕塑订做主题玻璃钢雕塑加工价格河南玻璃钢雕塑安装2021国庆商场美陈新元素开封景观标识玻璃钢卡通雕塑玻璃钢贝壳雕塑高邮玻璃钢气球雕塑河北玻璃钢景观雕塑报价玻璃钢基督教雕塑云南景区玻璃钢雕塑价位玻璃钢雕塑工厂工艺的设计玻璃钢雕塑哪个公司的好处蚂蚁玻璃钢雕塑图片天津玻璃钢雕塑价格玻璃钢新娘雕塑专卖店玻璃钢奶牛雕塑 微信玻璃钢 雕塑价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化