activity

Android常见内存泄漏的原因

删除回忆录丶 提交于 2019-12-16 17:38:58
内存泄漏概念:内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 一、单例模式使用Activity作为Context 单例模式中应该避免使用Activity作为传入的Context,否则,单例模式会持有这个Activity的引用,导致它无法释放,造成内存泄漏。应该使用ApplicationContext作为Context传入。如果一定要使用Activity的话,要使用弱引用WeakReference。 二、未关闭资源或者没有反注册 BroadcastReceiver,File,Cursor,IO流等资源在 Activity 的onDestroy必须unregister 或者 close ,否则这个 Activity 类会被 system 强引用,不会被内存回收。关闭的语句必须在finally中进行关闭,否则有可能因为异常未关闭资源,致使activity泄漏。 三、Handler造成内存泄漏 只要 Handler 发送的 Message 尚未被处理,则该 Message 及发送它的 Handler 对象将被线程 MessageQueue 一直持有。特别是handler执行延迟任务。所以,Handler 的使用要尤为小心,否则将很容易导致内存泄露的发生。 public

[Android各版本特性]Android 10

六眼飞鱼酱① 提交于 2019-12-16 03:58:00
文章目录 1.创新技术和新体验 1.可折叠设备 2.5G 网络 3.通知中的智能回复 4.深色主题 5.手势导航 6.设置面板 7.共享快捷方式 2.用户隐私设置 1.赋予用户对位置数据的更多控制权 2.在扫描网络时保护位置数据 3.阻止设备跟踪 4.保护外部存储设备中的用户数据 5.屏蔽意外中断 6.在后台运行时访问设备位置信息需要权限 7.对 /proc/net 文件系统的访问权限实施了限制 8.对启用和停用 WLAN 实施了限制 9.限制对屏幕内容的访问 10.面向用户的权限检查(针对旧版应用) 3.安全性 1.存储加密 2.默认启用 TLS 1.3 3.TLS 不信任使用 SHA-1 签名的证书 4.连接性 1.改进了点对点连接和互联网连接 2.WLAN 性能模式 5.Android 基础知识 1.ART 优化 2.Thermal API *6.其他要注意的点 1.android.preference 库已弃用 2.Android Beam 已弃用 3.有关限制非 SDK 接口的更新 4.共享内存 5.支持可折叠设备 1.创新技术和新体验 1.可折叠设备 Android 10 基于强大的多窗口支持构建而成,扩展了跨应用窗口的多任务处理能力,还提供了屏幕连续性,可以在设备折叠或展开时维持应用状态。Android 10 在 onResume 和 onPause 中添加了多项改进

手把手带你了解内存抖动和泄漏的优化

主宰稳场 提交于 2019-12-16 02:05:45
前言 这个系列的文章: 1、用通俗易懂的讲解方式,讲解一门技术的实用价值 2、详细书写源码的追踪,源码截图,绘制类的结构图,尽量详细地解释原理的探索过程 3、提供Github 的 可运行的Demo工程,但是我所提供代码,更多是提供思路,抛砖引玉,请酌情cv 4、集合整理原理探索过程中的一些坑,或者demo的运行过程中的注意事项 5、用gif图,最直观地展示demo运行效果 如果觉得细节太细,直接跳过看结论即可。本人能力有限,如若发现描述不当之处,欢迎留言批评指正。 学到老活到老,路漫漫其修远兮。与众君共勉 !,和我一起当个CV工程师吧,手动滑稽 正文大纲 jvm内存管理常识 检测以及处理内存抖动 检测以及处理内存泄漏 正文 jvm内存管理常识 LMK (LowMemoryKill)机制 android底层会在系统内存告急的时候,按照一定规则杀死一些进程来满足其他进程的内存需要。其中 消耗内存的高低就是其中一项指标,所以,优化app的内存占用,能够有效降低app被系统杀死的概率。 GC STW机制 GC,垃圾回收进程,在 GC 线程执行任务的时候,会存在一个 STW (stop the world) 机制,他就会把其他所有线程都挂起。如果 GC 非常频繁地调用,那就会导致主线程不流畅,给用户的感觉就是 卡顿。 内存抖动频繁引起OOM 内存抖动太频繁,导致大量对象频繁创建和销毁

Android AndroidManifest 清单文件以及权限详解

核能气质少年 提交于 2019-12-15 20:45:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 每个Android应用都需要一个名为AndroidManifest.xml的程序清单文件,这个清单文件名是固定的并且放在每个Android应用的根目录下。它定义了该应用对于Android系统来说一些非常重要的信息。Android系统需要这些信息才能正常运行该应用。Android程序清单文件主要具有下面作用: · 它给应用程序Java包命名,这个包名作为应用程序唯一标识符。 · 它描述了应用程序中的每个程序组件—Activity,Service,Broadcast Receivers和Content Provider。它描述了实现每个应用程序组件的类名称和组件能力(比如组件能够处理哪种类型的Intent消息)。这些描述帮助Andoid操作系统了解这些程序组件和在何种条件下可以启动这些程序组件。 · 它决定哪些进程用来运行应用程序组件。 · 它描述了应用程序使用某些受保护的程序API或和其它应用程序交互所需的权限。 · 它也描述了其它应用程序和该应用交互时应拥有的权限。 · 它列出了Instrumentation类用于提供应用程序运行时一些性能统计和其它信息。这些生命只在测试或开发应用时使用。在发布应用时应该删除。 · 它给出了应用运行所需AndroidAPI版本的最低要求。 ·

Android开发性能优化总结

南楼画角 提交于 2019-12-15 18:38:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Android性能调优包含 移动网络优化 Java(Android)代码优化 布局优化 数据库性能优化 参考链接 http://www.trinea.cn/android/android-traceview/ 本文主要针对代码调优 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢;动画执行过程不流畅,或者动画执行卡顿时间长;ListView列表滑动过程中卡顿,不流畅;应用程序自定义的某特定界面执行速度慢;响应某一用户事件时长时间无响应(ANR);操作数据库时,执行大量数据的增删改查操作,执行速度慢;文件读写频繁,缓存文件过大导致卡顿;应用长时间运行后,随机出现卡顿现象。 以上的问题的原因可能不只一个,并且很多情况下并不是应用本身的问题,也有可能是系统其他层次有问题,只不过体现在应用层。所以开发人员在处理性能问题时,需要做的第一件事情就是判断是否是应用自身引起的性能问题,然后再对症下药;但有些时候应用本身逻辑正常,但由于系统的硬件配置不足引起了异常,此时就要根据产品或项目需求,采取一些更加精准的方式优化性能,以弥补硬件配置的不足。 以下从几个不同的角度总结一下应用程序性能优化的一些方法。 一、编程思想 应用层的性能优化通常可以从以下几个方面考虑: 了解编程语言的编译原理

android.os.NetworkOnMainThreadException异常处理

独自空忆成欢 提交于 2019-12-15 17:45:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 第一种: public void onCreate(Bundle savedInstanceState) { // 详见StrictMode文档 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); super.onCreate(savedInstanceState); setContentView(R.layout.main); InitDialog(); } 在android 2.3上设计的下载程序,在android 4.0上运行时报 android.os

关于利用java反射实现,Android 工程插件化的理解。个人认为并不是上下文的注入,而是调用。

送分小仙女□ 提交于 2019-12-14 10:05:27
最近在研究Android 工程的插件化,也可是说是热更新,让项目插件化,功能模块放到插件工程中,编译为插件apk。已实现在不重新安装开发包的基础上,达到更新项目功能模块的效果。当然也可以用于换肤 了很多网上的资料和视频,感觉有些地方还是很误导读者。所以在这里整理一下,关于java反射使Android 项目插件化的原理。 实际上是利用了java反射的原理和DexClassLoader 这个类,载入apk中的class类和资源。 dexClassLoader = new DexClassLoader(dexpath,dexOutputPath, null, mContext.getClassLoader()); AssetManager assetManager = AssetManager.class.newInstance(); Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class); addAssetPath.invoke(assetManager, dexpath); resources = new Resources(assetManager, mContext.getResources().getDisplayMetrics(), mContext

Intent的用法(2)

社会主义新天地 提交于 2019-12-13 14:56:26
Intent简介 Intent可以用来启动 Activity(startActivity(Intent)) 、 Serveice(startService(Intent)) 等组件, 可以用来绑定Activity和Service以建立它们之间的通信 ( bindServiceConnaction(Intent,ServiceConnection,int) ) 可以作为Broadcast Intent发送给广播接收器 ( sendBroadcast(Intent) ) Intent的属性: 主要属性 Action 执行的动作类型。在定义自定义action时,需要包含app的包名,例如: static final String ACTION_TIMEREVEL = "com.exmple.action.TIMERAVEL" 1 Activity Actions 动作名称 作用 ACTION_MAIN 表示程序入口 ACTION_VIEW 自动以最合适的方式显示Data ACTION_EDIT 提供可以编辑的 ACTION_PICK 选择一个一条Data,并且返回它 ACTION_DAIL 显示Data指向的号码在拨号界面Dailer上 ACTION_CALL 拨打Data指向的号码 ACTION_SEND 发送Data到指定的地方 ACTION_SENDTO

如何安全退出Activity

泄露秘密 提交于 2019-12-13 11:16:41
如何退出Activity?如何安全退出已调用多个Activity的Application 1、通常情况用户退出一个Activity只需按返回键,我们写代码想退出activity直接调用finish()方法就行。 2、记录打开的Activity: 每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。 //伪代码 List<Activity> lists ;// 在application 全局的变量里面 lists = new ArrayList<Activity>(); lists.add(this); for(Activity activity: lists) { activity.finish(); } lists.remove(this); 3、发送特定广播: 在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。 //给某个activity 注册接受接受广播的意图 registerReceiver(receiver, filter) //如果过接受到的是 关闭activity的广播 就调用finish()方法 把当前的activity finish()掉 4、递归退出 在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。 5

使用揭露动画,让你的应用特效更进一步!

半腔热情 提交于 2019-12-13 06:25:38
/ 前言 / 完整叫法应该是圆形揭露动画,下文简称揭露动画,因为 Android 系统中只提供了这一种圆形的(Circular)揭露动画! 所谓揭露动画,就是一种用于 View (之间),甚至界面之间的特殊过渡动画效果。 AndroidPlatform 的 android.view 包下有个 ViewAnimationUtils 类,这是使用系统所提供揭露动画的唯一入口,其对外暴露的唯一接口如下: 通过其静态的 createCircularReveal 方法来构造一个动画(Animator)对象,具体其实是个 RevealAnimator 类对象,进而可以实现一种炫酷(到底炫不炫酷就很主观了)的动画效果! 靠动图来阐明揭露之意再合适不过,为此我写了个小 demo,运行效果如下: App 的揭露效果: Activity 的揭露效果: 普通 View 的揭露效果: 几图胜千言!以上就是所谓的揭露动画。Demo 源码(Kotlin)我已放至 Github,源码在此地址如下: https://github.com/xiaofei-dev/AppReveal 下面我们好好聊下这种过渡动画的具体实现。 墙裂建议结合 Demo 阅读本文,另外 Demo 中的代码注释十分详细,读者可以试试如果仅根据 Demo 中的源码注释就能理解上面效果背后的所有原理……下面的正文我还是建议你读一下! / 正文