标签: leakcanary

Android 媒体播放器保留应用程序实例并导致内存泄漏

我有一个媒体播放器作为成员变量的活动。

我的媒体播放器是这样初始化的:

mMediaPlayer = new MediaPlayer(); 
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource(MyActivity.this, URL); 
mMediaPlayer.prepareAsync(); 
//i set a on Prepared Listener to start playing on Prepared
Run Code Online (Sandbox Code Playgroud)

一切正常,然后我覆盖我的活动 onStop 方法以释放媒体播放器。

if(mMediaPlayer!=null){
   if(mMediaPlayer.isPlaying()){
       mMediaPlayer.stop();
   }
   mMediaPlayer.release();
   mMediaPlayer=null;
}
Run Code Online (Sandbox Code Playgroud)

但是在活动停止后,我从 LeakCanary 收到了内存泄漏报告。

报告是这样的:

MyApp.Instance->

MyApp.mLoadedApk->

LoadedApk.mReceivers->

ArrayMap.mArray->

arrayObject[].[3]->

ArrayMap.mArray->

arrayObject[][0]->

MediaPlayer.mProxyReceiver->

MediaPlayer.mProxyContext->

leaks MyActivity instance.

MyApp.Instance->

MyApp.mLoadedApk->

LoadedApk.mReceivers->

ArrayMap.mArray->

arrayObject[].[3]->

ArrayMap.mArray->

arrayObject[][0]->

MediaPlayer.mProxyReceiver->

MediaPlayer.mProxyContext->

leaks MyActivity instance.
Run Code Online (Sandbox Code Playgroud)

是的,我有一个扩展 Application 的 MyApp 类,并且我在静态字段中持有对 MyApp 实例的引用,但我从未在我的活动中使用该引用,我该如何解决这个泄漏?

[编辑]

这是我的活动代码:

public class PlayActivity extends ActionBarActivity {

private MediaPlayer mediaPlayer;
@Override
protected void …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks android-mediaplayer leakcanary

5
推荐指数
1
解决办法
3453
查看次数

这个内存是否在我的代码或AOSP中泄漏?

我是LeakCanary工具的新手,在确定这个泄漏是否是由我的代码或Android本身泄漏引起的问题时遇到了问题.

我的猜测是这是一个Android问题,应该添加到AndroidExcludedRefs.java,但由于我是该工具的新手,我想在这个主题上提供一些帮助.

这是泄漏痕迹:

In com.visma.ruby:2.14.0:20.
* com.visma.ruby.invoice.create.InvoiceActivity has leaked:
* GC ROOT static android.view.WindowManagerGlobal.sDefaultWindowManager
* references android.view.WindowManagerGlobal.mRoots
* references java.util.ArrayList.array
* references array java.lang.Object[].[3]
* references android.view.ViewRootImpl.mContext
* references android.view.ContextThemeWrapper.mBase
* leaks com.visma.ruby.invoice.create.InvoiceActivity instance
* Retaining: 26 KB.
* Reference Key: ecc25c5b-2e09-492d-bdf4-cf5c02029ae3
* Device: LGE google Nexus 5 hammerhead
* Android Version: 6.0.1 API: 23 LeakCanary: 1.5 00f37f5
* Durations: watch=643568ms, gc=155ms, heap dump=3193ms, analysis=51151ms

* Details:
* Class android.view.WindowManagerGlobal
|   static ADD_INVALID_TYPE = -10
|   static RELAYOUT_RES_SURFACE_CHANGED = 4 …
Run Code Online (Sandbox Code Playgroud)

android leakcanary

5
推荐指数
0
解决办法
398
查看次数

Crashlytics Android中的内存泄漏

我在我的应用程序中使用Crashlytics 2.6.5。金丝雀泄漏总是报告内存泄漏CrashlyticsUncaughtExceptionHandler。有人面对过吗?请参考所附图片以获取更多信息

在此处输入图片说明

android memory-leaks crashlytics twitter-fabric leakcanary

5
推荐指数
0
解决办法
434
查看次数

我应该删除泄漏金丝雀代码/类以进行发布构建吗?

我搜索了一个答案,找不到任何东西,这可能意味着这是一个基本问题.冒着表达我无知的风险,无论如何我都会问.我正在准备我的应用程序发布,并希望确保泄漏金丝雀不会弹出我的用户.我的泄漏金丝雀相关的依赖关系就是这样.

dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
}
Run Code Online (Sandbox Code Playgroud)

我认为,因为releaseCompile包含no-op它意味着我可以按原样继续我的发布版本而不删除Leak Canary代码.我对吗?

android memory-leaks release leakcanary

5
推荐指数
2
解决办法
2283
查看次数

即使在添加到 gradle 之后也无法解析参考

我正在解决对这三个类的引用:

  • 木材

  • 泄漏金丝雀

  • 查找导航控制器

我在我的 gradle 中为这些添加了依赖项,我在其他项目中也有这些依赖项,但我在这里遇到了问题。

我试图:

  • 清理、重建、依赖构建、构建必要
  • 删除了 .gradle、.idea、build、app/build 文件夹并重建应用程序,但问题仍然存在
  • 我也试过 invalidate-cache 并重新启动它也没有帮助

摇篮文件:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.oss.licenses.plugin'
apply plugin: 'androidx.navigation.safeargs'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
compileSdkVersion 28
buildToolsVersion '28.0.0 rc2'
defaultConfig {
    applicationId "com.nrs.sid.creditcardsecurity"
    minSdkVersion 19
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    javaCompileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
        }
    }
}
sourceSets {
    androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}
buildTypes { …
Run Code Online (Sandbox Code Playgroud)

android android-navigation android-gradle-plugin leakcanary timber-android

5
推荐指数
1
解决办法
4580
查看次数

LeakCanary - SearchView 泄漏?

我有一个活动,它的工具栏中有一个 SearchView,并且还包含 2 个片段(一个列出过去的搜索词,另一个显示结果)。加载该活动和片段后,LeakCanary 开始显示通知,指出该活动和两个片段都已泄漏。这三个都有类似的报告,如下所示:

在此处输入图片说明

它还从一个叫做 ReportFragment 的东西开始(我猜是一个系统片段,其泄漏报告也与上面发布的内容基本相同):

在此处输入图片说明

我无法弄清楚可能会泄漏什么,但我想知道是否有人遇到过类似的问题?

java android leakcanary

5
推荐指数
0
解决办法
218
查看次数

LeakCanary DialogFragment 泄漏检测

每次我尝试显示 DialogFragment 时,都会出现内存泄漏。

这是我的测试对话框(取自 android 开发人员页面)的样子:

public class TestDialog extends DialogFragment {

    public static TestDialog newInstance(int title) {
        TestDialog frag = new TestDialog();
        Bundle args = new Bundle();
        args.putInt("title", title);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int title = getArguments().getInt("title");

        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.ic_action_about)
                .setTitle(title)
                .setPositiveButton(R.string.ok,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                //((FragmentAlertDialog)getActivity()).doPositiveClick();
                            }
                        }
                )
                .setNegativeButton(R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                //((FragmentAlertDialog)getActivity()).doNegativeClick();
                            }
                        }
                )
                .create(); …
Run Code Online (Sandbox Code Playgroud)

android android-dialogfragment leakcanary

5
推荐指数
1
解决办法
1324
查看次数

android.support.constraint.ConstraintLayout已泄漏:

我正在使用LeakCanary检测应用程序中的内存泄漏。我使用它成功地识别并修复了一些泄漏,但是我正在努力寻找该泄漏的根源:

* android.support.constraint.ConstraintLayout has leaked:
* Toast$TN.mNextView
* ? LinearLayout.mContext
* ? HomeActivity.!(mDelegate)!
* ? AppCompatDelegateImplN.!(mActionBar)!
* ? ToolbarActionBar.!(mDecorToolbar)!
* ? ToolbarWidgetWrapper.!(mToolbar)!
* ? Toolbar.mParent
* ? ConstraintLayout
* Reference Key: 552b5bc5-409d-44c4-8412-87341237ae6d
* Device: samsung samsung SM-G960F starltexx
* Android Version: 8.0.0 API: 26 LeakCanary: 1.6.2 0ebc1fc
* Durations: watch=5769ms, gc=153ms, heap dump=933ms, analysis=5802ms
Run Code Online (Sandbox Code Playgroud)

这是由Android SDK或应用专用代码引起的吗?

android memory-leaks leakcanary

5
推荐指数
1
解决办法
1493
查看次数

FirebaseInAppMessagingDisplay 正在从随机片段泄漏布局

我们正在使用 firebase inapp 消息传递,它似乎在应用程序中任意泄漏(如泄漏金丝雀所示)多个内容。

这种泄漏有时会出现飞溅活动、OTP 片段或任何其他属于应用程序启动的内容。,

通常leakcanary将平台内容报告为Exclude,但这似乎没有被排除,令人惊讶的是,在任何这些片段/活动中都没有与inappmessage或firebae相关的代码。

        * Details:
    * Instance of com.app.nhs.NHSApplication
    |   static __nhsApplicationContext = com.app.nhs.NHSApplication@1115479984 (0x427cdfb0)
    |   static $staticOverhead = byte[48]@1115478585 (0x427cda39)
    |   static TAG = "NHSApplication"
    |   exoConfig = im.ene.toro.exoplayer.Config@1121658096 (0x42db24f0)
    |   profileId = null
    |   profileObj = null
    |   simpleCache = com.google.android.exoplayer2.upstream.cache.SimpleCache@1121423792 (0x42d791b0)
    |   mActivityLifecycleCallbacks = java.util.ArrayList@1115480056 (0x427cdff8)
    |   mAssistCallbacks = null
    |   mComponentCallbacks = java.util.ArrayList@1115480032 (0x427cdfe0)
    |   mLoadedApk = android.app.LoadedApk@1115461752 (0x427c9878)
    |   mBase = android.app.ContextImpl@1115551592 (0x427df768)
    * Instance of java.util.ArrayList
    |   static $staticOverhead = …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks firebase leakcanary firebase-in-app-messaging

5
推荐指数
0
解决办法
356
查看次数

LoadedApk$ServiceDispatcher.mContext 泄漏

经过多次轮换并且应用程序处于后台后,我收到此泄漏。这是堆栈跟踪,我无法理解原因。另外32474006字节保留的对象非常多。我有 10 个相同的泄漏。

\n
32474006 bytes retained by leaking objects\nDisplaying only 1 leak trace out of 10 with the same signature\nSignature: 329ec5b3be0cfe3ed2fc888129f5a6be93fb9\n\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n\xe2\x94\x82 GC Root: Global variable in native code\n\xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80 android.app.LoadedApk$ServiceDispatcher$DeathMonitor instance\n\xe2\x94\x82    Leaking: UNKNOWN\n\xe2\x94\x82    \xe2\x86\x93 LoadedApk$ServiceDispatcher$DeathMonitor.this$0\n\xe2\x94\x82                                               ~~~~~~\n\xe2\x94\x9c\xe2\x94\x80 android.app.LoadedApk$ServiceDispatcher instance\n\xe2\x94\x82    Leaking: UNKNOWN\n\xe2\x94\x82    \xe2\x86\x93 LoadedApk$ServiceDispatcher.mContext\n\xe2\x94\x82                                  ~~~~~~~~\n\xe2\x95\xb0\xe2\x86\x92 com.ics.homework.ui.MainActivity instance\n\xe2\x80\x8b     Leaking: YES (ObjectWatcher was watching this because com.ics.homework.ui.MainActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)\n\xe2\x80\x8b     key = 8bcc50f8-ea3f-47d9-8dc3-904042a58df4\n\xe2\x80\x8b     watchDurationMillis = 60220\n\xe2\x80\x8b     retainedDurationMillis = 55216\n====================================\n0 LIBRARY LEAKS\n
Run Code Online (Sandbox Code Playgroud)\n

泄漏原因

\n
@AndroidEntryPoint\nclass MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener { …
Run Code Online (Sandbox Code Playgroud)

android leakcanary

5
推荐指数
2
解决办法
1606
查看次数