请问android的剪贴板内容监听器会不会内存泄露

问题描述

请问android的剪贴板内容监听器会不会内存泄露

if (clipboard == null){
clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
//当剪贴词语被改变之后更新剪贴词时间
clipCreateTime = System.currentTimeMillis();
}
});
}

如上是一个activity的代码,这个activity会不会一直被系统剪贴板持有而导致无法被回收?有什么解决办法?谢谢。

解决方案

不会。首先java程序想要内存泄露还是挺难的。第二,这个activity调用了剪贴板,将内容复制到剪贴板后,剪贴板作为android提供的一个系统服务和它并无其他关系了。第三,activity会被android依据一些规则自动回收。

参考我的博客:http://blog.csdn.net/logicteamleader/article/details/46418725

解决方案二:

感觉是不会内存泄露,毕竟你没有循环执行,而且android是有机制的,如果占用过多会杀掉一些应用、保证系统流畅。

解决方案三:

我个人觉得应该是存在内存泄露的危险的。楼上的说你没有循环执行,其实内存泄露不一定说一定要有大量内存分配才叫泄露,我见过一次register
一个广播接收者,然后没有unregister这样慢慢泄露,积少成多的。我看了ClipboardManager的源码中相关的代码

你添加的这个listenr会被add到一个mPrimaryClipChangedListeners(ArrayList)中。如果你了解过引用计数的概念,你应该知道是不会被释放的,除非你调用remove

//增加的
public void addPrimaryClipChangedListener(OnPrimaryClipChangedListener what) {
synchronized (mPrimaryClipChangedListeners) {
if (mPrimaryClipChangedListeners.size() == 0) {
try {
getService().addPrimaryClipChangedListener(
mPrimaryClipChangedServiceListener, mContext.getOpPackageName());
} catch (RemoteException e) {
}
}
mPrimaryClipChangedListeners.add(what);
}
}
//移除的
public void removePrimaryClipChangedListener(OnPrimaryClipChangedListener what) {
synchronized (mPrimaryClipChangedListeners) {
mPrimaryClipChangedListeners.remove(what);
if (mPrimaryClipChangedListeners.size() == 0) {
try {
getService().removePrimaryClipChangedListener(
mPrimaryClipChangedServiceListener);
} catch (RemoteException e) {
}
}
}
}

时间: 2025-01-29 23:53:05

请问android的剪贴板内容监听器会不会内存泄露的相关文章

android如何获取系统剪贴板内容被加入的时间

问题描述 android如何获取系统剪贴板内容被加入的时间 我要利用android系统剪贴板做一些需求,需要设置一个剪贴板内容的失效时间,但是不知道如何获取剪贴板内容进入的系统时间.查API未果,求大神解答 解决方案 你可以自己另外保存时间. 解决方案二: 可以自己用sharedpreferenced保存时间

Android ADB 怎么操作手机剪贴板,如何读取和写入剪贴板内容?

问题描述 Android ADB 怎么操作手机剪贴板,如何读取和写入剪贴板内容? 网上搜索到这个命令:shell service call clipboard 1 但没有正确返回内容,总是提示:i Attempt to invoke virtual method int android content ClipData getItemCount() on a null object reference 执行shell service call clipboard 2 返回Unknown pack

Android 复制文本内容到系统剪贴板的最简单实例(分享)

这个例子很简单,直接上截图和代码. 布局文件activity_copy.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layou

位图-请问Android如何通过拍照的Bitmap存在本地File文件

问题描述 请问Android如何通过拍照的Bitmap存在本地File文件 请问Android如何通过拍照的Bitmap存在本地File文件,并且不会因为使用decodeFile而导致内存溢出 解决方案 安卓可以隐式调用内置的照相机应用,调用时intent附上输出Uri,当照相完毕后,文件你传入的uri对应的图片文件已经有内容了,已经变成一张图片. 如果想要查看图片的话,可以从文件再获取输入流,bitmap大小计算方式是:横向像素乘以纵向像素乘以每个像素占用内存.比如一张720*1280的以AR

保存恢复-c# Clipboard操作。如何保存剪贴板内容,在操作完成后恢复内容

问题描述 c# Clipboard操作.如何保存剪贴板内容,在操作完成后恢复内容 看过别人的方法,将各种数据分类读取到数据,占用剪贴板完成后再分类保存.但这种方法存在问题.因为C#的剪贴板读取和保存数据类型是有限的,如果对于一些用户自定义书记的剪贴板或者其他程序的自定义数据.操作后是不能如实恢复剪贴板的. 别人的例子程序. object xx = null; string ctype = ""; try { if (Clipboard.ContainsText()) { ctype =

Android实现静态广播监听器的方法_Android

本文实例讲述了Android实现静态广播监听器的方法.分享给大家供大家参考.具体实现方法如下: package lab.sodino.broadcastaction; import lab.sodino.util.DatabaseOpenHelper; import lab.sodino.util.SodinoOut; import android.app.Activity; import android.content.ContentResolver; import android.datab

第三方应用-请问 Android 直接 跳转微信公众号怎么解决?

问题描述 请问 Android 直接 跳转微信公众号怎么解决? 如题 请问 Android 直接 跳转微信公众号怎么解决? 就是Android第三方应用中点击按钮跳转到微信公众号关注界面,或者会话界面 新手求解答 解决方案 Android - 跳转微信公众号 解决方案二: 之前有人问过这个问题,我也回复过:http://ask.csdn.net/questions/199770 如果想打开微信里面某一个页面,你可以反编译微信androidmainfest.xml看看定义的Activity,然后通

请问Android前置摄像头录制的视频,怎么处理“镜面”问题?

问题描述 请问Android前置摄像头录制的视频,怎么处理"镜面"问题? 我在用前置摄像头录制的视频,播放出来左右"反"了,IOS的同事是将视频的每一祯图片进行了处理,我在Android API没有找到相关的处理方法,求大神们支招

内容而模板-请问dedecms中,内容页模板是怎样被调用的?

问题描述 请问dedecms中,内容页模板是怎样被调用的? 看了一些仿站的视频,在加入内容页模板时,只需要将article_article.htm加入到 自定义的模板目录下,那么内容页就会自动显示为模板的样式,那么内容页模板是怎样被调用的啊?是不是整个网站里的内容而模板就只能用这一种样式? 解决方案 可以另外改内容页的模版样式的,你可以搜索一下dede模版 有很多 根据说明进行相应的替换就好了 解决方案二: dedecms列表页调用文章正文内容的方法内容页怎么调用模板页的属性Asp.net C#