Error[8]: Undefined offset: 2, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我试图实现Chrome自定义标签,并通过LeakCanary检测内存泄漏. 演示应用程序似乎不会泄漏,除非我们添加另一个Activity层(即MainActivity启动Activity2,将绑定/取消绑定到自定义选项卡服务并启动url – MainActivity在demo app中的所有内容). MainActivity看起来像这样: public class MainActivity ext 我试图实现Chrome自定义标签,并通过LeakCanary检测内存泄漏.

演示应用程序似乎不会泄漏,除非我们添加另一个Activity层(即MainActivity启动Activity2,将绑定/取消绑定到自定义选项卡服务并启动url – MainActivity在demo app中的所有内容).

MainActivity看起来像这样:

public class MainActivity extends Activity implements OnClickListener {    private button mLaunchbutton;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        LeakCanary.install(getApplication());        setContentVIEw(R.layout.main);        mLaunchbutton = (button) findVIEwByID(R.ID.launch_button);        mLaunchbutton.setonClickListener(this);    }    @OverrIDe    public voID onClick(VIEw v) {        int vIEwID = v.getID();        if (vIEwID == R.ID.launch_button) {            Intent intent = new Intent(getApplicationContext(),Activity2.class);            startActivity(intent);        }    }}

从Activity2返回到MainActivity将导致此泄漏:

09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ In org.chromium.customtabsclIEnt.example:1.0:1.09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * org.chromium.customtabsclIEnt.Activity2 has leaked:09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * GC ROOT androID.support.customtabs.CustomTabsClIEnt.val$callback (anonymous class extends androID.support.customtabs.ICustomTabsCallback$Stub)09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * references org.chromium.customtabsclIEnt.Activity2.this[+++] (anonymous class extends androID.support.customtabs.CustomTabsCallback)09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * leaks org.chromium.customtabsclIEnt.Activity2 instance

https://gist.github.com/abvanpelt/ddbc732f31550b09fc27

我的问题是:这是演示应用程序中的错误吗? (可能unbindCustomTabsService()缺少一些需要的拆卸?)或者这是Chrome自定义选项卡库中的错误?

谢谢.

解决方法 示例中的MainActivity将创建一个CustomTabsServiceConnection和CustomTabsCallback作为匿名内部类的实例.

如果将其更改为静态内部类,那么删除对MainActivity的引用,并将MainActivity的引用设置为WeakReferences,您将看到LeakCanary停止关于MainActivity泄露的报告.

现在,如果您将其设置为观看该对象,则仍可能会看到有关ServiceConnection漏洞的漏洞报告.原因是它链接到Chrome服务,GC不能在GC服务器端运行.

我创建了一个在一个循环中绑定和解除绑定的测试,我已经确认ServiceConnections确实在一段时间后被收集.

因此,可以改进演示,以避免ServiceConnection对MainActivity的引用,避免在服务断开连接后长时间存在活动等重物,而且自定义标签库也不是问题.

总结

以上是内存溢出为你收集整理的android – 在Chrome自定义标签中检测到内存泄漏全部内容,希望文章能够帮你解决android – 在Chrome自定义标签中检测到内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
android – 在Chrome自定义标签中检测到内存泄漏_app_内存溢出

android – 在Chrome自定义标签中检测到内存泄漏

android – 在Chrome自定义标签中检测到内存泄漏,第1张

概述我试图实现Chrome自定义标签,并通过LeakCanary检测内存泄漏. 演示应用程序似乎不会泄漏,除非我们添加另一个Activity层(即MainActivity启动Activity2,将绑定/取消绑定到自定义选项卡服务并启动url – MainActivity在demo app中的所有内容). MainActivity看起来像这样: public class MainActivity ext 我试图实现Chrome自定义标签,并通过LeakCanary检测内存泄漏.

演示应用程序似乎不会泄漏,除非我们添加另一个Activity层(即MainActivity启动Activity2,将绑定/取消绑定到自定义选项卡服务并启动url – MainActivity在demo app中的所有内容).

MainActivity看起来像这样:

public class MainActivity extends Activity implements OnClickListener {    private button mLaunchbutton;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        LeakCanary.install(getApplication());        setContentVIEw(R.layout.main);        mLaunchbutton = (button) findVIEwByID(R.ID.launch_button);        mLaunchbutton.setonClickListener(this);    }    @OverrIDe    public voID onClick(VIEw v) {        int vIEwID = v.getID();        if (vIEwID == R.ID.launch_button) {            Intent intent = new Intent(getApplicationContext(),Activity2.class);            startActivity(intent);        }    }}

从Activity2返回到MainActivity将导致此泄漏:

09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ In org.chromium.customtabsclIEnt.example:1.0:1.09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * org.chromium.customtabsclIEnt.Activity2 has leaked:09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * GC ROOT androID.support.customtabs.CustomTabsClIEnt.val$callback (anonymous class extends androID.support.customtabs.ICustomTabsCallback$Stub)09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * references org.chromium.customtabsclIEnt.Activity2.this (anonymous class extends androID.support.customtabs.CustomTabsCallback)09-04 13:49:26.783  10456-12161/org.chromium.customtabsclIEnt.example D/LeakCanary﹕ * leaks org.chromium.customtabsclIEnt.Activity2 instance

https://gist.github.com/abvanpelt/ddbc732f31550b09fc27

我的问题是:这是演示应用程序中的错误吗? (可能unbindCustomTabsService()缺少一些需要的拆卸?)或者这是Chrome自定义选项卡库中的错误?

谢谢.

解决方法 示例中的MainActivity将创建一个CustomTabsServiceConnection和CustomTabsCallback作为匿名内部类的实例.

如果将其更改为静态内部类,那么删除对MainActivity的引用,并将MainActivity的引用设置为WeakReferences,您将看到LeakCanary停止关于MainActivity泄露的报告.

现在,如果您将其设置为观看该对象,则仍可能会看到有关ServiceConnection漏洞的漏洞报告.原因是它链接到Chrome服务,GC不能在GC服务器端运行.

我创建了一个在一个循环中绑定和解除绑定的测试,我已经确认ServiceConnections确实在一段时间后被收集.

因此,可以改进演示,以避免ServiceConnection对MainActivity的引用,避免在服务断开连接后长时间存在活动等重物,而且自定义标签库也不是问题.

总结

以上是内存溢出为你收集整理的android – 在Chrome自定义标签中检测到内存泄漏全部内容,希望文章能够帮你解决android – 在Chrome自定义标签中检测到内存泄漏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1131612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存