Articles of 内存泄漏

为什么EditText在Ice Cream Sandwich中保留其Activity的Context

在Ice Cream Sandwich中,当有一个包含EditText的Activity时,即使用户离开Activity,EditText也会保留Activity的Context。 为了certificate这一点,我创建了TestLeakActivity,它分配了一个大字节数组。 由于Activity的Context不会被垃圾收集,因此字节数组会在堆上累积,最终导致OutOfMemoryError。 您可以使用DDMS堆工具观察堆增长,并且可以通过查看Eclipse MAT中的HPROF文件来跟踪对EditText类的未完成引用。 要创建内存泄漏,请进入LaunchActivity,然后继续启动并退出TestLeakActivity。 LaunchActivity.java package com.example.testleakproject; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; 公共类LaunchActivity扩展Activity { @覆盖 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); 按钮按钮=新按钮(此); button.setText(“Start TestLeakActivity”); button.setOnClickListener(new OnClickListener(){ @覆盖 public void onClick(查看v){ Intent intent = new Intent(LaunchActivity.this,TestLeakActivity.class); startActivity(意向); } }); ViewGroup container =((ViewGroup)findViewById(android.R.id.content)); […]

活动已泄露窗口/对话框(再次!)

是的,我已经阅读了关于同样问题的无数问题。 我的代码很简单:我只是在onCreate上使用showDialog(int id) ,然后我旋转设备。 代码就是那个(测试用例) ,这足以导致问题。 我的理解是showDialog的方法会处理这个……对话框会消失,然后在更改后稍后调用onCreate并再次显示对话框。 但不是。 这个推理有什么问题? 我(我想)了解原因 ,但我不知道如何解决这个问题。 即使是iosched应​​用程序也会在EULA窗口的实现方面遇到同样的问题(在eula对话框中更改方向并导致泄漏)。 我已经阅读了关于关闭onPause的对话框的内容,但是1)当它没有显示时,我冒险解雇,2)跟踪对话似乎太多了。 必须有一个更强大的方法。 那么……处理这个问题需要哪些更干净的代码呢? 谢谢。 日志错误输出: 01-30 00:27:18.615: E/WindowManager(20316): Activity com.test.PreSetupActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@418e0c28 that was originally added here 01-30 00:27:18.615: E/WindowManager(20316): android.view.WindowLeaked: Activity com.test.PreSetupActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@418e0c28 that was originally added here 01-30 00:27:18.615: E/WindowManager(20316): at android.view.ViewRootImpl.(ViewRootImpl.java:343) 01-30 00:27:18.615: E/WindowManager(20316): at […]

升级到Android 4.2.2后出现奇怪的错误 – 活动泄露了IntentReceiver

我昨晚将三星Galaxy Tab 2升级到Android 4.2.2,之后发现LogCat中出现了一些奇怪的错误,这些错误在我’升级’之前没有出现过。 我希望它突出显示我的应用程序中隐藏的错误或内存泄漏,但我找不到任何东西。 它似乎只发生在我Spinner的活动有一个Spinner ,并且Spinner被扩展的情况下。 错误如下。 Activity uk.co.xxxx.xxxx has leaked IntentReceiver com.immersion.android.haptics.HapticFeedbackManager$HapticFeedbackBroadcastReceiver@41e4bac0 that was originally registered here. Are you missing a call to unregisterReceiver()? 有没有人见过这个? 您是否认为可以忽略它,因为它只发生在我的某个设备上? —编辑— 而且,顺便说一句,我没有在任何地方注册任何接收器,所以没有注销。

Google Play服务泄漏

我刚开始使用Google Play游戏服务,昨天在检查logcat时我无法注意到这个错误: E / DataBuffer(3183):检测到DataBuffer对象内部数据泄漏! 确保在完成所有DataBuffer扩展对象后显式调用close()。 (内部对象:com.google.android.gms.common.data.DataHolder@40555410) 它连续发生几次。 我不确定它为什么会出现。 它不会使我的应用程序崩溃也不会使谷歌成就/排行榜function停止工作。 我所知道的是它与“unlockAchievementImmediate”和“submitScoreImmediate”function有关。 有没有人遇到此问题或有任何建议? 编辑:在我的应用程序中,我只使用“unlockAchievementImmediate”和“submitScoreImmediate”。 这些函数不返回任何需要关闭的缓冲区。

带有图像的Android ViewPager:内存泄漏/应用程序崩溃

我正在编写一个应用程序,显示全景图片,最终有几个标记,以显示有关某些点的信息。 由于大图像崩溃了应用程序(我还在应用程序中显示了一个大型地图的另一个活动),我现在正在尝试使用ViewPager将全景图显示为一系列页面。 我已设法以6位显示图片,我认为情况进展顺利,但现在应用程序在内存耗尽后进行了几次刷卡(大约7到8次)后崩溃。 我正在拉我的头发为什么那是因为我认为我的物品一旦离开屏幕就会被摧毁? 我是一个绝对的新手,我很抱歉,如果我是浪费时间。 我花了一整天的时间阅读并尝试从这里和其他地方的解决方案,我不是更聪明。 这是我的代码:活动PanoramaView public class PanoramaView extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.panorama); MyPagerAdapter adapter = new MyPagerAdapter(); ViewPager myPager = (ViewPager) findViewById(R.id.mysixpanelpager); myPager.setAdapter(adapter); myPager.setCurrentItem(2); } } MyPagerAdapter public class MyPagerAdapter extends PagerAdapter { public int getCount() { return 6; } public Object instantiateItem(View collection, int position) […]

Android内存泄漏?

我认为我的Android应用程序正在泄漏内存。 我不完全确定这是问题所在。 打开时应用程序经常崩溃,logcat显示尝试加载位图图像时出现“内存不足”exception。 崩溃后,我重新打开应用程序,它工作正常。 Logcat显示了很多“gc”,并且每隔一段时间就会向上调整JIT表的大小,从不向下,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗? 如果是这样,我该如何定位和关闭泄漏。 这是我的app的adb shell meminfo。 ** MEMINFO in pid 2691 [com.example.deepcliff] ** native dalvik other total size: 23264 8839 N/A 32103 allocated: 12503 3826 N/A 16329 free: 168 5013 N/A 5181 (Pss): 2512 1395 13815 17722 (shared dirty): 2088 1844 5008 8940 (priv dirty): 2412 224 11316 13952 Objects Views: […]

EditText导致内存泄漏

介绍: 我有一个具有以下结构的应用程序:ActionBar up top(ActionBarSherlock)ViewPagerIndicator(用于标签)ViewPager(hosts Fragments) 我有一个问题,我的一个片段导致相当大的内存泄漏。 我将问题缩小到以下情况: 导致泄漏的碎片除了在onCreateView方法中膨胀布局外什么都不做。 这是通过以下方式完成的: return inflater.inflate(R.layout.filter_auctions_fragment, container, false); 这里没什么不寻常的。 布局文件中只包含一个ScrollView , LinearLayout和两个EditText (包含更多通常的内容,但我将问题缩小到这些视图以使其变得简单)。 现在用于添加片段的代码:mTabsAdapter.addTab(tabName,ProblematicFragment.class); mTabsAdapter是mTabsAdapter的一个实例, mTabsAdapter是一个扩展支持库的FragmentPagerAdapter的类。 这是相当标准的,所以我不包括使这个问题尽可能短的来源。 现在有趣的部分: 当我来回旋转设备几次时,堆会发生这种情况: 12-28 12:26:27.180: D/dalvikvm(18841): GC_CONCURRENT freed 530K, 7% free 10701K/11436K, paused 4ms+7ms, total 58ms 12-28 12:26:27.180: D/dalvikvm(18841): WAIT_FOR_CONCURRENT_GC blocked 24ms 12-28 12:26:28.270: D/dalvikvm(18841): GC_CONCURRENT freed 737K, 8% free 11048K/11964K, paused 4ms+5ms, total […]

分配游标时内存不足

我有一个我无法弄清楚的记忆问题。 我有一个类可以完成所有数据库检索工作。 我遇到的错误如下: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=733 (# cursors opened by this proc=733) 执行此操作时发生内存分配错误: mDatabaseInterface.getGraphForLevel(level); 我知道这是一个漏洞,因为我大约每2.5秒调用一次这种方法,并且5或6次首次呼叫很容易通过。 现在这里是我的DatabaseInterface类中的方法: public Graph getGraphForLevel(Level level) { //get the nodes ArrayList nodes = new ArrayList(Arrays.asList(this.getNodesWithLevel(level))); //get the edges ArrayList edges = new ArrayList(Arrays.asList(this.getEdgesWithNodes(nodes))); return new Graph(nodes, edges); } public Node[] getNodesWithLevel(Level level) { […]

可能通过FinalizerReference泄漏内存

我有一个小的Android应用程序,我试图寻找内存泄漏,所以我点击’转储Java堆’,列表上的第一个类是FinalizerReference(java.lang.ref)。 它有超过500个实例,每个实例都有一个’next’和’prev’到另一个FinalizerReference。 我知道FinalizerReference来自实现Object.finalize()的对象,但我的应用程序中没有实现它的对象。 我怎样才能找出泄漏发生的原因并修复它?

比较堆转储(HPROF)文件

是否可以比较两个HPROF文件? 怎么样?