标签: android-memory

制作Android应用程序时是否有内存管理技巧?

我最近在一次关于Android的采访中被问了一些问题.我搜索了其中一些,但我找不到合适的资源和答案.所以我想在这里与大家分享.

  1. 在Android中使用的首选布局是什么(为了更好的内存消耗等)?我没有答案,面试官告诉我这是相对布局.这是真的 ?对此有何解释?

  2. 告诉我你为更好的内存消耗做的一些做法?我看了一下,但似乎还有其他东西.因为面试官提到一些与静态变量相关的事情比较好.

  3. 如果Android需要内存,它会杀死服务还是活动?优先问题.我也没有找到任何人讨论这个问题.面试官说服务的一些事情比活动具有高优先级(??),因此活动是被杀死的组成部分.这是真的 ?任何进一步的资源或解释?

请分享您对此问题的所有知识或资源.

android android-layout android-memory

9
推荐指数
1
解决办法
2216
查看次数

textview上的Android内存泄漏 - LeakCanary(可以忽略泄漏)

当我从启动画面转到主要活动时,LeakCanary会显示以下内存泄漏.我知道这是由于Android操作系统本身的故障导致的预期泄漏,但有没有办法可以避免这种情况(通过在某处设置某些TextView的细节?)

D/LeakCanary? * LEAK CAN BE IGNORED.
D/LeakCanary? * com.gmspartnersltd.earthmiles.views.ActivitySignUp_ has leaked:
D/LeakCanary? * GC ROOT static android.text.TextLine.sCached
D/LeakCanary? * references array android.text.TextLine[].[1]
D/LeakCanary? * references android.text.TextLine.mCharacterStyleSpanSet
D/LeakCanary? * references android.text.SpanSet.spans
D/LeakCanary? * references array android.text.style.CharacterStyle[].[1]
D/LeakCanary? * references com.gmspartnersltd.earthmiles.views.ActivitySignUp$2.this$0 (anonymous class extends android.text.style.ClickableSpan)
D/LeakCanary? * leaks com.gmspartnersltd.earthmiles.views.ActivitySignUp_ instance
D/LeakCanary? [ 05-22 08:54:52.160 13969:18091 D/LeakCanary ]
    * Reference Key: bb8124a9-2829-4ff3-8ded-13cf35f80f54
D/LeakCanary? * Device: Genymotion generic Google Nexus 5 - 5.0.0 - API 21 - 1080x1920 vbox86p
D/LeakCanary? * Android Version: …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks ddms android-memory leakcanary

9
推荐指数
1
解决办法
4488
查看次数

BitmapFactory.decodeResource和莫名其妙的内存不足

我得到一个奇怪的Out of Memory错误解码一个可绘制的图像资源960x926px jpg,分配3555856字节.图像仅放在drawable-xxhdpi(3x)中,我使用的是hdpi(1.5x)设备.两个问题:

  • 为什么我在堆中有足够的可用内存时会收到错误?

  • 为hdpi设备分配应该是((960/2)x(926/2))x 4 = 888960字节(不是3555856)?

有人可以解释一下吗?

注意:问题是为什么在拥有22.5MB可用内存时获得3.5MB的OOM分配(参见日志)

03-18 17:30:15.050 32750-32750 /?D/dalvikvm:GC_FOR_ALLOC释放10809K,49%免费23735K/46087K,暂停89ms,总计89ms

03-18 17:30:15.050 32750-32750 /?I/dalvikvm-heap:强制收集3555856字节分配的SoftReferences

03-18 17:30:15.160 32750-32750 /?D/dalvikvm:GC_BEFORE_OOM释放29K, 49%免费23705K/46087K,暂停103ms,总计103ms

03-18 17:30:15.160 32750-32750 /?E/dalvikvm-heap:3555856字节分配的内存不足.

03-18 17:30:15.160 32750-32750 /?I/dalvikvm:"main"prio = 5 tid = 1 RUNNABLE

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| group ="main"sCount = 0 dsCount = 0 obj = 0x418fc6a0 self = 0x4010c008

03-18 17:30:15.160 32750-32750 /?我/ dalvikvm:| sysTid = 32750 nice = 1 sched = 0/0 cgrp = apps handle = 1075251280

03-18 …

android android-image bitmapfactory android-memory android-bitmap

9
推荐指数
1
解决办法
1004
查看次数

Android上下文弱参考

在我的一些应用程序中,我使用一些单例对象作为"管理器".我实例化它们Application.onCreate并将它传递给它ApplicationContext,我将它存储在一个WeakReference.

一些"管理器"方法在从a调用之后启动后台任务Activity,所以我将Activity's' 传递context给方法,并保持一个WeakReference到那个(并在其中使用AsyncTask).该引用一直保持,直到下一次的Activity调用转到后台的方法,当WeakReference设置为新Activitycontext.

我的问题是,是否将ApplicationContext必须保持在WeakReference,并在那里与保持任何问题Activitycontext这样呢?

android android-context android-asynctask android-memory

7
推荐指数
2
解决办法
4551
查看次数

OutOfMemoryError虽然vm有足够的可用内存

我得到这个奇怪的OutOfMemoryError,虽然dalvikvm报告了足够的堆空间.日志:

12-09 14:16:05.527: D/dalvikvm(10040): GC_FOR_ALLOC freed 551K, 21% free 38000K/47687K, paused 173ms, total 173ms
12-09 14:16:05.527: I/dalvikvm-heap(10040): Grow heap (frag case) to 38.369MB for 858416-byte allocation
12-09 14:16:05.699: D/dalvikvm(10040): GC_FOR_ALLOC freed 6K, 21% free 38832K/48583K, paused 169ms, total 169ms
12-09 14:16:05.894: D/dalvikvm(10040): GC_FOR_ALLOC freed 103K, 20% free 38929K/48583K, paused 169ms, total 169ms
12-09 14:16:05.894: I/dalvikvm-heap(10040): Forcing collection of SoftReferences for 858416-byte allocation
12-09 14:16:06.074: D/dalvikvm(10040): GC_BEFORE_OOM freed 6K, 20% free 38922K/48583K, paused 182ms, total 182ms
12-09 14:16:06.074: E/dalvikvm-heap(10040): Out of …
Run Code Online (Sandbox Code Playgroud)

android android-memory

7
推荐指数
1
解决办法
3101
查看次数

adb shell dumpsys meminfo - 其输出的每个单元格的含义是什么?

我正在查看下面给出的命令输出

adb shell dumpsys meminfo com.imangi.templerun

但是,我无法正确理解这一点.

任何人都可以帮我理解这个吗?

Temple Run记忆信息

shell android adb android-memory

7
推荐指数
1
解决办法
2万
查看次数

SharedElement和自定义EnterTransition导致内存泄漏

拥有共享元素动画以及自定义输入动画会导致活动泄漏.

知道可能是什么原因?

09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * com.feeln.android.activity.MovieDetailActivity has leaked: 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * GC ROOT android.app.ActivityThread$ApplicationThread.this$0 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references android.app.ActivityThread.mActivities 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references android.util.ArrayMap.mArray 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references array java.lang.Object[].[1] 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references android.app.ActivityThread$ActivityClientRecord.activity 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references com.feeln.android.activity.MovieDetailActivity.mActivityTransitionState 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references android.app.ActivityTransitionState.mEnterTransitionCoordinator 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references android.app.EnterTransitionCoordinator.mEnterViewsTransition 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * references android.transition.TransitionSet.mParent 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary? * …

android memory-leaks android-memory leakcanary

7
推荐指数
2
解决办法
2600
查看次数

Android内存管理粒度 - 活动还是流程?

我看到不一致的文档和讨论有关Android内存不足时发生的情况以及操作系统重新声明内存的步骤.更具体地说,Android会以活动/片段或整个过程的粒度杀死吗?

例如,如果活动B在活动A前面启动(并且两个活动都是同一个应用程序/进程的一部分),活动A可以被操作系统杀死,而活动B位于前台,用户正在与活动B交互(假设:屏幕保持打开,当前应用程序保持在前台,没有发生方向更改)?

这个苏答案(在Android团队在谷歌的戴安娜Hackborn),从2011年表明,Android的杀死在流程的粒度,并不是一项活动.

在对Android开发者页面重新创建一个活动,它说:

如果系统当前已停止且未长时间使用或前台活动需要更多资源,系统也可能会破坏您的活动,因此系统必须关闭后台进程才能恢复内存.

注意歧义:"系统必须关闭后台进程 ".

onSaveInstanceState的Android Developer页面上,它说:

例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态

在阅读了这些以及许多其他文档页面和在线讨论后,尚不清楚正确的答案是什么.

我也有关于片段的相同问题:由于内存不足而导致背景片段被杀死,而整个过程是否被杀死?

android android-fragments android-activity android-memory

7
推荐指数
1
解决办法
568
查看次数

为什么基本的Android应用程序内存中有数百个位图?

在构建我的第一个Android应用程序时,我注意到应用程序启动时内存使用率已接近20MB.我下载了Eclipse MAT并查看了内容,以便在内存中找到数百个(如果不是数千个)位图.其中很多都没有直接用在我的项目中(至少不是我所知道的那么多)

最大图像为9MB:https: //imagebin.ca/v/2eCK4JYLO2f2

其他更小:https: //imagebin.ca/v/2eCMmbFuIWsz

Android似乎已经竭尽全力通过使用zygote来减少内存...那么为什么内存中已经有这么多未使用的位图呢?

(基本项目是使用Android Studio的空白活动,片段由文本视图组成,简单地说"Hello World!")

android android-memory android-bitmap

7
推荐指数
1
解决办法
96
查看次数

Android Studio Profiler内存分配N / A

嗨,我在实际设备/仿真器上运行应用程序时无法查看为应用程序分配的内存,分析器显示为“已分配

下面是屏幕截图,

在此处输入图片说明 我正在运行android studio版本3.3.2,是否还需要配置其他内容。

performance android android-memory android-studio android-profiler

7
推荐指数
2
解决办法
221
查看次数