首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

很全面的Android面试题

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?...除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.如果有多个后台进程,在选择杀死的目标时,采用最近最少使用算法(...以下几种情况的分析都遵循该原则 当用户按下HOME键时 长按HOME键,选择运行其他的程序时 锁屏时 从activity A中启动一个新的activity时 屏幕方向切换时 如何退出Activity?...活动传递给Fragment:为了方便碎片和活动之间进行通信, FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,前提是自己在布局文件中定义...假设手机本地需要缓存数据,如何保证和服务器的数据统一? 比如有个网络更新的功能,activity可以每隔半小时开启service去访问服务器,获取最新的数据。

54910

很全面的Android面试题

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? ?...除了在栈顶的activity,其他的activity都有可能在内存不足的时候被系统回收,一个activity越处于栈底,被回收的可能性越大.如果有多个后台进程,在选择杀死的目标时,采用最近最少使用算法(...以下几种情况的分析都遵循该原则 当用户按下HOME键时 长按HOME键,选择运行其他的程序时 锁屏时 从activity A中启动一个新的activity时 屏幕方向切换时 如何退出Activity?...活动传递给Fragment:为了方便碎片和活动之间进行通信, FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,前提是自己在布局文件中定义...假设手机本地需要缓存数据,如何保证和服务器的数据统一? 比如有个网络更新的功能,activity可以每隔半小时开启service去访问服务器,获取最新的数据。

5.9K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于redis,你需要了解的几点!

    ziplist编码使用更加紧凑的结构实现多个元素的连续存储,因此占用的内存更小。...4、refcount:当前对象被引用次数,辅助回收,可以通过 object refcount {key} 查看引用数,当对象为整数且值在范围在[0-9999]时,redis可以通过共享对象的方式来节省内存...目前共享对象池只对整数设置了0~9999个共享对象,一方面整数对象池复用率最大,同时等值判断上时间复杂度为O(1)。...第二部分我们说过,对string值得频繁append及range操作会会导致内存碎片问题,另外,第七部分,SDS惰性内存回收也会导致内存碎片,同时过期键内存回收也伴随着所释放空间的无法充分利用,导致内存碎片率上升的问题...碎片处理: 应用层面:尽量避免差异化的键值使用,做好数据对齐。 redis服务层面:可以通过重启服务,进行碎片整理。

    72820

    Android内存管理(一)官方文档介绍

    本章为官方文档,主要介绍 Android 如何管理应用进程和内存分配。...要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。这种情况有一个例外:对于任何未经修改的内存映射文件(如代码),如果系统想要在其他位置使用其内存,可将其从 RAM 中换出。...在这种情况下,垃圾回收器会执行多个垃圾回收事件,并可能降低应用的性能。 共享内存 共享内存 为了在 RAM 中容纳所需的一切,Android 会尝试跨进程共享 RAM 页面。...例如,窗口 surface 使用在应用和屏幕合成器之间共享的内存,而光标缓冲区则使用在内容提供器和客户端之间共享的内存。...但是,从较小分配量中回收内存的效率要低得多,因为用于较小分配量的页面可能仍在与其他尚未释放的数据块共享。

    1.6K10

    你想要的Android性能优化系列:内存优化 !

    其中:程序计数器pc、虚拟机栈和本地方法栈,是线程私有的;方法区和堆内存是线程共享的。下面对他们进行详细的介绍: 1....在对垃圾进行回收前,GC要先标记出垃圾,那么如何标记呢?...CollectorTransition:由堆转换引起的回收,这是运行时切换GC 而引起的。收集器转换包括将所有对象从空闲列表空间复制到碰撞指针空间(反之亦然)。...内存泄漏导致该被回收的对象无法回收,导致能使用的内存越来越少。 内存抖动在短时间内频繁的申请和释放内存,导致内存碎片,无法申请到可用的连续内存,即oom。...解决方案如下所示: 使用一个静态Handler内部类,然后对Handler持有的对象(一般是Activity)使用弱引用,这样在回收时,也可以回收Handler持有的对象。

    1.4K30

    高频面试点:Android性能优化之内存优化(上篇)

    6)Finalized(终结) 等待垃圾回收器回收该对象空间。 7)Deallocated(对象空间重新分配) GC对该对象所占用的内存空间进行回收或者再分配,则该对象彻底消失。...例如,Window Surface在App和Screen Compositor之间使用共享的内存,Cursor Buffers在Content Provider和Clients之间共享内存。...6Old Generation GC 由于其对象存活时间较长,比较稳定,因此采用Mark(标记)算法(扫描出存活的对象,然后再回收未被标记的对象,回收后对空出的空间要么合并,要么标记出来便于下次分配,以减少内存碎片带来的效率损耗...又持有Activity的引用,所以导致该Activity的内存资源无法及时回收,引发内存泄漏。...解决方案如下所示: 1、使用一个静态Handler内部类,然后对Handler持有的对象(一般是Activity)使用弱引用,这样在回收时,也可以回收Handler持有的对象。

    1.4K20

    GC Roots,safePoint安插点,STW,CMS;Davliku002FART垃圾回收

    “吞吐量”:赋值器(使用垃圾回收器的线程也就是用户线程)与垃圾回收器的效率总和。...因为内存分配和访问(内存碎片化导致过多的分配和访问)比垃圾回收器回收的频率(回收时需要STW,而且比较耗时)要高,因此整理这种方式其实吞吐量要比清除要好。...CMS注重延时,所以这款垃圾回收器采用的回收算法是标记-清除和标记-整理算法两种进行回收,采用标记清除允许有内存碎片产生,但是当碎片不足以分配新对象的内存时采用标记-整理算法将内存变为规整。...放的多了会导致GC收集过于频繁增加运行时内存压力,放的少了又会因为堆中不断增加使用的内存而没有及时回收堆里面内存导致垃圾收集器等待时间过长。...safePoint位置选好了,但是上个问题说过执行到safePoint中需要进行STW,发生GC时,我该如何快速跑到safePoint附近进行STW?还有我这个STW该怎么实现呢?

    43620

    java虚拟机和内存模型

    2.垃圾标记算法 在对垃圾进行回收前,GC要先标记出垃圾,那么如何标记呢,目前有两种垃圾标记算法,分别是 引用计数算法 和 根搜索算法。...(1)引用计数算法的基本思想就是每个对象都有一个引用计数器,当对象在某处被引用的时候,它的引用计数器就加1,引用失效时就减1。当引用计数器中的值变为0,则该对象就不能被使用成了垃圾。...这种算法每次都对整个半区进行内存回收,不需要考虑内存碎片的问题,代价就是使用内存为原来的一半。 复制算法的效率跟存活对象的数目多少有很大的关系,如果存活对象很少,复制算法的效率就会很高。...线程A与线程B之间如要通信的话(共享内存模型),必须要经历下面2个步骤: 1.线程A把本地内存A中更新过的共享变量刷新到主内存中去。...2.线程B到主内存中去读取线程A之前已更新过的共享变量。 (所以中断线程的标记位必须要声明为volatile,让修改过的变量立马刷新到主存中去)

    88770

    Android面试题(四大组件篇)

    Fragment是一个一个的小碎片 1)相比较与Activity来说更加灵活,可以在XML文件中直接进行写入,也可以在Activity中动态添加; 2)可以使用show()/hide()...Fragment的显示要依赖于Activity,从Fragment的生命周期中就可以了解到。 Q:何时会考虑使用Fragment?...可以直接调用到Service中的方法,如果要主动通知Activity,我们可以利用回调方法 Service向Activity发送消息,可以使用广播,当然Activity要注册相应的接收器。...其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。 (2)只有需要在多个应用程序间共享数据是才需要内容提供者。...例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。 (3)ContentProvider实现数据共享。

    91420

    Android性能优化系列---管理你的app内存(一)

    对于大多数的app来说,Dalvik虚拟机的垃圾回收器帮你进行了内存回收和管理:当响应的对象超出应用范围时回收和释放。...本文描述了Android如何管理app进程和内存分配,以及当你进行android开发时如何减少内存使用。至于Java里通用的资源释放方式请参看其他相关文档。...因此完全释放你app内存的唯一方式是释放对象引用以便于能被垃圾回收器回收。这有个例外:当加载没有修改的文件例如代码进入RAM时,该文件占用的内存空间能被RAM回收。...然而,从较小的分配回收内存可能效率低得多,因为用于小分配的页仍然可以被引用和共享,尚未被释放。...这确保了如果用户从activity返回到先前的activity时,你的UI资源是仍然有效的,以便于快速resume你的activity。

    1.4K30

    Android常问面试题,赶紧收藏一波

    01 谈谈四种GC算法 标记—清除 Mark-Sweep 过程:标记可回收对象,进行清除 缺点:标记和清除效率低,清除后会产生内存碎片 复制算法 过程:将内存划分为相等的两块,将存活的对象复制到另一块内存...finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 JVM不保证此方法总被调用 ?...使用场景如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。...singleInstance 模式 在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。...其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。使用场景如闹铃提醒,将闹铃提醒与闹铃设置分离。

    61620

    Android性能优化之内存优化

    此外,堆也是垃圾回收器(GC)所主要作用的区域,并且,内存泄漏也都是发生在这个区域。=> 所有线程共享 5)、程序计数器:存储当前线程执行目标方法执行到了第几行。...以减少内存碎片带来的效率损耗)来回收。...解决方案如下所示: 1、使用一个静态Handler内部类,然后对Handler持有的对象(一般是Activity)使用弱引用,这样在回收时,也可以回收Handler持有的对象。...软引用可以和一个ReferenceQueue(引用队列)联合使用,如果软引用引用的对象被垃圾回收器回收,JVM会把这个软引用加入与之关联的引用队列中。...从API 9起(Android 2.3)开始,Android系统垃圾回收器更倾向于回收持有软引用和弱引用的对象,所以不是很靠谱,从Android 3.0开始(API 11)开始,图片的数据无法用一种可遇见的方式将其释放

    2.6K30

    Android性能优化(三)之内存管理

    堆:JVM管理的内存中最大的一块,所有线程共享;用来存放对象实例,几乎所有的对象实例都在堆上分配内存;此区域也是垃圾回收器(Garbage Collection)主要的作用区域,内存泄漏就发生在这个区域...4、对象是否回收的依据 4.1引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用该对象时,计数器值加1;引用失效时,计数器值减1;任意时刻计数器为0的对象就是不可能再被使用的,表示该对象不存在引用关系...标记-清理回收算法无法对Heap中空闲内存区域做碎片整理。...通常需要特别关注其中更为昂贵的dirty部分,它不仅只被你的进程使用而且会持续占用内存而不能被从内存中置换出存储。...AppContexts及Activities:应用进程里Context和Activity的对象个数,可以用来监测Activity的内存泄露。

    85940

    Redis入坟(八)内存管理与优化,面试必考

    安全重启: 重启节点可以做到内存碎片重新整理, 因此可以利用高可用架构, 如Sentinel或Cluster, 将碎片率过高的主节点转换为从节点, 进行安全重启。...内存管理 Redis主要通过控制内存上限和回收策略实现内存管理, 本节将围绕这两个方面来介绍Redis如何管理内存。 设置内存上限 Redis使用maxmemory参数限制最大可用内存。...由于内存碎片率的存在, 实际消耗的内存可能会比maxmemory设置的更大, 实际使用时要小心这部分内存溢出。 通过设置内存上限可以非常方便地实现一台服务器部署多个Redis进程的内存控制。...回收内存逻辑伪代码如下: 频繁执行回收内存成本很高, 主要包括查找可回收键和删除键的开销, 如果当前Redis有从节点, 回收内存操作对应的删除命令会同步到从节点, 导致写放大的问题。...如果没有设置maxmemory, 直到内存被用尽Redis也不会触发内存回收, 所以共享对象池可以正常工作。 综上所述, 共享对象池与maxmemory+LRU策略冲突, 使用时需要注意。

    97710

    Android基础部分再学习---activity的生命周期

    它仍然保持着自身的所有实例和状态,所以根本不用担心它在返回到onResume方法时,实例会变为null,或者控件的事件监听不了(我以前就担心过这个问题)。...但要注意,你应该选择哪些信息必须保留在onPause(),因为这个方法任何阻塞程序都会阻止过渡到下一个Activity,这样给用户体验就感觉十分缓慢。...如果是用户finish这个Activity,那么返回为true,如果只是暂时离开或者被系统回收的话,就返回false。...3.如何强制性关闭一个activity Android下结束进程的方法   一、结束一个活动Activity   要主动的结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity...的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中弹出当前的Activity,激活下一个Activity。

    91320

    《移动互联网技术》第五章 界面开发: 掌握Activity的基本概念,Activity的堆栈管理和生命周期

    了解活动如何生存,以及活动整个生命周期的状态变迁,能更清楚地知道如何去实现活动。 从系统的角度来看,当Android应用(APP)启动运行时,就会创建一个任务(Task)。...从用户的角度来看,用户在使用Android应用的时候,经常打开多个界面(活动),完成一系列的操作,比如:用户要在浏览器中查看新闻就需要点击新闻列表,打开新闻浏览界面;如果想把刚才看到的新闻分享给微信中的朋友...把活动在生命周期中调用的生命进行配对,可以更容易的理解如何使用这些方法。首先,onCreate()函数和onDestroy()函数是一对。...通过设置Intent中的flag和AndroidMainifest.xml中的Activity元素的属性,可以控制Task中Activity的关联关系和行为。...设置了Flags的意图启动一个 Activity 后,这个Activity可以根据意图中的Flags值判断意图来自哪里。 2、Android为何使用称为监听器的接口机制处理事件?

    22510

    深入了解一下Redis的内存模型!

    二、Redis内存统计 工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计Redis使用内存的情况。...4、内存碎片 内存碎片是Redis在分配、回收物理内存过程中产生的。...如果Redis服务器中的内存碎片已经很大,可以通过安全重启的方式减小内存碎片:因为重启之后,Redis重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减小内存碎片。...redisObject对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisObject支持,下面将通过redisObject的结构来说明它是如何起作用的。...虽然共享对象只能是整数值的字符串对象,但是5种类型都可能使用共享对象(如哈希、列表等的元素可以使用)。

    66320

    深入了解一下Redis的内存模型

    二、Redis内存统计 工欲善其事必先利其器,在说明Redis内存之前首先说明如何统计Redis使用内存的情况。...4、内存碎片 内存碎片是Redis在分配、回收物理内存过程中产生的。...如果Redis服务器中的内存碎片已经很大,可以通过安全重启的方式减小内存碎片:因为重启之后,Redis重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减小内存碎片。...redisObject对象非常重要,Redis对象的类型、内部编码、内存回收、共享对象等功能,都需要redisObject支持,下面将通过redisObject的结构来说明它是如何起作用的。...虽然共享对象只能是整数值的字符串对象,但是5种类型都可能使用共享对象(如哈希、列表等的元素可以使用)。

    52220

    深度历险:Redis 内存模型详解

    Redis 内存统计 工欲善其事必先利其器,在说明 Redis 内存之前首先说明如何统计 Redis 使用内存的情况。...如果 Redis 服务器中的内存碎片已经很大,可以通过安全重启的方式减小内存碎片:因为重启之后,Redis 重新从备份文件中读取数据,在内存中进行重排,为每个数据重新选择合适的内存单元,减小内存碎片。...RedisObject 对象非常重要,Redis 对象的类型、内部编码、内存回收、共享对象等功能,都需要 RedisObject 支持,下面将通过 RedisObject 的结构来说明它是如何起作用的。...虽然共享对象只能是整数值的字符串对象,但是5种类型都可能使用共享对象(如哈希、列表等的元素可以使用)。...综上所述,RedisObject 的结构与对象类型、编码、内存回收、共享对象都有关系。

    71520
    领券