我有一个 Android活动和使用aidl实现的服务.像冠军一样工作,我有一个回调设置将一些线程通知传递回UI,并且看起来工作正常,除了很多

GREF已增加到101,201,301,401,501等,GREF已减少.我做了一些在线搜索,发现它必须做全球参考.

08-17 02:31:19.735: DEBUG/dalvikvm(2558): GREF has increased to 301
...
08-17 02:31:25.823: DEBUG/dalvikvm(2558): GREF has increased to 401
...
08-17 02:31:36.772: DEBUG/dalvikvm(2558): GREF has increased to 501
...
08-17 02:31:42.694: DEBUG/dalvikvm(2558): GREF has increased to 601
...
08-17 02:31:48.695: DEBUG/dalvikvm(2558): GREF has increased to 701
... 
08-17 02:31:59.883: DEBUG/dalvikvm(2558): GREF has decreased to 599
08-17 02:31:59.912: DEBUG/dalvikvm(2558): GREF has decreased to 499
08-17 02:31:59.912: DEBUG/dalvikvm(2558): GREF has decreased to 399
08-17 02:31:59.912: DEBUG/dalvikvm(2558): GREF has decreased to 299
08-17 02:31:59.912: DEBUG/dalvikvm(2558): GREF has decreased to 199

我做了一些搜索,发现大部分关于此的评论相当陈旧.我担心的是我正在正确地实现我的客户端/服务,并且想知道如何跟踪导致GREF增加的原因.欢迎任何想法/建议.谢谢!

基本程序流程

Client -> Creates Callback
Client -> Starts Service
Service -> Inits & Starts CountDownTimer
Service.CountDownTimer.onFinish() -> DownloadAndParse()
DownloadAndParse() -> initialize new saxRequest(),new Handler for this request.
Service.Handler->beginbroadcast()
Client.CallbackStub -> updateUI()
Client.CallbackStub -> service.startCountDownTimer()

希望这是有道理的.我会在这里发布代码,但是有这么多不同的文件.我想我会试着把流量放到看看是否有什么明显的……我唯一能看到的可能就是重新使用saxRequest()而不是创建一个新实例……我现在会尝试,但我真的想知道GREF和垃圾收集的影响..

解决方法

这些是JNI全球参考.如果您不编写本机代码,则无法直接控制它们.启用CheckJNI时会显示日志消息,默认情况下对于工程版本和模拟器启用.

消息只是意味着本机代码告诉VM不允许丢弃某些对象.本质上,全局引用是本机代码添加对GC根集的引用的一种方式.假设本机代码写得正确,当本机代码不再需要它们时,将清除全局引用.

引起关注的唯一原因是全球参考数量是否继续攀升,因为这表明全球参考泄漏.由于VM无法释放对象,因此全局ref泄漏最终会导致VM耗尽内存.为了帮助识别此类问题,启用CheckJNI时,会对全局引用的数量设置上限(当前限制为2000).

android – GREF在多线程服务中增加/减少(aidl) – 这是什么意思?的更多相关文章

  1. android – GREF在多线程服务中增加/减少(aidl) – 这是什么意思?

    我有一个Android活动和使用aidl实现的服务.像冠军一样工作,我有一个回调设置将一些线程通知传递回UI,并且看起来工作正常,除了很多GREF已增加到101,201,301,401,501等,GREF已减少.我做了一些在线搜索,发现它必须做全球参考.我做了一些搜索,发现大部分关于此的评论相当陈旧.我担心的是我正在正确地实现我的客户端/服务,并且想知道如何跟踪导致GREF增加的原因.欢迎任何想法/建议.谢谢!

  2. android – play_licensing使用Gradle将APK扩展为downloader_library抛出AIDL错误

    我尝试使用APKExpansionlibszip_file和downloader_library(需要play_licensing).zip_file工作正常,因为它没有依赖项,但是当我尝试Gradle同步时,play_licensing会引发错误.AndroidStudio吐出此错误日志:我没有修改任何库,但由于它们不是为Gradle构建的,我从另一个项目复制了build.gradle并相应地修

  3. android – 在bindService()之后没有连接的AIDL服务

    我正在尝试使用AIDL开发2个应用程序(服务应用客户端应用程序)的设置.我目前有3个模块的设置:>android-agent-framework(只保存AIDL文件的android库模块)>android-agent(服务)>android-example-client(客户端)android-agent和android-agent-framework对第一个访问接口的依赖.每当客户端调用bind

  4. android-studio找不到在课堂上使用的aidl接口

    我有一个在aidl中定义的接口,但我无法扩展它或以任何方式找到它.ide告诉我:无法解析符号’KeyEventListener’知道如何解决这个问题吗?

  5. 如何在android中解决此错误“com.android.internal.telephony无法解析为类型”

    我正在创建简单的呼叫过滤应用程序,限制不必要的呼我使用以下代码来限制调用,但我无法在下面的代码中解决此行的问题“com.android.internal.telephony.ITelephonytelephonyService=(ITelephony)m.invoke(tm);”它显示错误消息com.android.internal.telephony无法解析为android中的某个类型如何解决此

  6. android N无法在应用程序计费AIDL中编译

    解决方法我想你必须改变下面的几点minSdkVersion’N’和compileSdkVersion’android-N’将您的JAVAJDK更新为1.8

  7. 详解Android中AIDL的使用

    AIDL是Android Interface definition language的缩写,对于小白来说,AIDL的作用是让你可以在自己的APP里绑定一个其他APP的service,这样你的APP可以和其他APP交互,接下来通过本文给大家分享Android AIDL使用,需要的朋友参考下吧

  8. Android 创建AIDL文件使用教程

    这篇文章主要介绍了Android创建AIDL文件使用教程,AIDL是一种IDL语言,用于生成可以在Android设备上两个进程之间进行进程间通信的代码

  9. Android Studio 中aidl的自定义类的使用详解

    这篇文章主要介绍了Android Studio 中aidl的自定义类的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  10. Android Studio编写AIDL文件后如何实现自动编译生成

    这篇文章主要介绍了Android Studio编写AIDL文件后如何实现自动编译生成,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部