Android攻城bug分享-01

2024-05-31 21:32
文章标签 android 分享 01 bug 攻城

本文主要是介绍Android攻城bug分享-01,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一  项目中出现的问题

         android的项目中,难免会使用fragment,也会使用sp来保存一些设置。但在fragment使用sp中的时候会面临

内存不够的时候被回收的问题,这个时候程序就会崩溃的情况,即使有全局异常来处理,但不可避免造成不好

的用户体验。

第二  问题探究

         在fragment使用上下文,一般有两种方式,一种是使用activity,另一种是使用application。

使用activity的话,一般是getActivity(),或者采取构造方法来进行传递,这样的方法都可以,但

无论是哪种都会面临失效为null的情况。原因相信大家都知道,fragment依附于activity存活。

内存不够的时候,activity都会干掉,何况依附于他的小弟。

        另一种是application是跟程序的生命周期绑定的,这个最为稳妥,但在组件中的量级也最为重

不是特别的时候,尽量不要使用,但应对崩溃的情况没办法的话也可以应急一下。

第三    项目的解决方案-只是自己的方法

        个人觉得比较好的方法最好是合二为一,这样既可以避免过多使用application,也可以在一定程度上避免

空指针的出现。

首先,针对application建立单例模式,这个作用就不说了,相信通用的程序都是这样做的

private static MyApplication instance;

public  static MyApplication getinstance() {

         if (instance == null) {

            instance = new MyApplication();

}

   return instance;

}

接着,一般的话为进行统一样式的设置或者一些主题的设置,都会统一建立BaseFragment, 在里面加入这个方法,

private  Activity activity;

public   Context getContext(){

         if(activity == null){

             return MyApplication.getinstance();

}

   return   activity;

}

上面的代码相信小伙伴们都能看懂,当出现activity为空的时候,就去使用application应急,一般的话就用activity最为合适。连着结合起来进行判断,当然根据自己的需求可以加入onAttach(),去得到activity

@Override

public void onAttach(Activity activity) {

       super.onAttach(activity);

       activity = getActivity();

}

上面的方法是自己的项目在迭代的时候出现的问题,之前用的是getActivity(),但是程序用个几个小时,再次打开的就呵呵了,收集错误日志的时候发现是这个毛病,现在依照这样弄就没事了。

分享项目中bug,牵扯到原理的一些地方我也不是很了解,有错误的地方,还请地方指正留言。

小弟在此拜谢了。

简书地址:https://www.jianshu.com/p/eb9e0bd5f623

这篇关于Android攻城bug分享-01的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019098

相关文章

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

OpenCV在Java中的完整集成指南分享

《OpenCV在Java中的完整集成指南分享》本文详解了在Java中集成OpenCV的方法,涵盖jar包导入、dll配置、JNI路径设置及跨平台兼容性处理,提供了图像处理、特征检测、实时视频分析等应用... 目录1. OpenCV简介与应用领域1.1 OpenCV的诞生与发展1.2 OpenCV的应用领域2

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具