我正在开发一个包含许多图像的应用程序.我注意到我的应用程序的内存使用量在Android 2.3中比在Android 2.2中高得多 - 最终导致在加载位图时出现OutOfMemory错误.在研究这个时,我在第一个活动的onResume中记录了Debug.getNativeHeapAllocatedSize()的结果.在Android 2.2中,这输出5MB.在Android 2.3中,这输出17MB.
我创建了一个示例应用程序,试图进一步缩小范围.示例应用程序有2个活动:第一个有一个小图像和一个按钮来启动第二个活动; 第二个活动在ScrollView中有几个大图像.您可以在此处下载示例:http: //dl.dropbox.com/u/21709517/MemoryUsageExample.zip运行此示例时,Debug.getNativeHeapAllocatedSize()报告在2.2和2.3中启动第一个活动后分配的3MB.启动第二项活动后,Android 2.2仍然报告已分配3MB,而Android 2.3报告已分配17MB.运行"adb shell dumpsys meminfo test.example"会显示相同类型的结果.
为什么Android 2.2和2.3之间存在如此巨大的差异?更重要的是,我应该做些什么来防止在Android 2.3上使用如此多的内存?
----- -----更新
在查看了Romain Guy发布的信息之后,我决定更多地使用各种加载选项.结果显示,强制图像作为RGB_565加载确实减少了Android 2.3中的内存,但它仍然使用超过2.2.在我的示例应用程序中,Android 2.3现在使用10MB而不是Android 2.2使用3MB.此外,我尝试使用ARGB_8888强制32位.在这种情况下,Android 2.3使用17MB,但Android 2.2继续只使用3MB.更新的示例可以在这里找到:http: //dl.dropbox.com/u/21709517/MemoryUsageExample2.zip
造成这些差异的原因是什么?还有更多需要做的事情来使内存使用更接近Android 2.2吗?还有,有办法强制通过xml布局创建的图像为特定格式吗?这可以在应用程序范围内设置吗?谢谢.
-----更新2 -----
根据这个帖子,不可能强制通过xml膨胀加载的图像成为特定格式.
我仍然希望得到一个答案,为什么Android 2.2和Android 2.3强制16或32位后使用不同的内存量.
我正在为一个班级写一个SMIL作曲家,我正在计划制作画布支持drap和drop,所以你可以随意放置图片和文字.我已经查看了示例并自己做了一些,但是当我去实现项目中的拖放时,它不起作用.以下是重要的主要代码:
public class ComposerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.composer);
Button add = (Button)findViewById(R.id.addBtn);
...
add.setOnClickListener(mClick);
...
}
OnClickListener mClick = new OnClickListener() {
@Override
public void onClick(View v){
if(v.getId() == R.id.addBtn)
{
FrameLayout fl = (FrameLayout)findViewById(R.id.Canvas);
LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.image_add, null);
View image = (View)itemView.findViewById(R.id.image);
image.setBackgroundResource(R.drawable.icon);
fl.addView(itemView, new FrameLayout.LayoutParams(40, 40));
image.setOnTouchListener(drag);
}
...
OnTouchListener drag = new OnTouchListener(){
@Override
public boolean …Run Code Online (Sandbox Code Playgroud) 我试图想出一种方法来让Sikuli的图像识别在C#中使用.我不想使用Sikuli本身,因为它的脚本语言有点慢,因为我真的不想在我的.NET C#app中引入一个java桥.
所以,我有一个代表我的屏幕区域的位图(我将这个区域称为BUTTON1).屏幕布局可能略有变化,或者屏幕可能已在桌面上移动 - 因此我无法使用直接位置.我必须首先找到BUTTON1 的当前位置在实时屏幕内的位置.(我试图发布这个图片,但我想我不能,因为我是一个新用户...我希望描述清楚......)
我认为Sikuli正在使用OpenCV.由于它是开源的,我想我可以对它进行逆向工程,并弄清楚如何在OpenCV中做他们正在做的事情,而不是在Emgu.CV中实现它 - 但我的Java不是很强大.
我查找了显示此示例的示例,但所有示例都非常简单(即,如何识别停止标志)或非常复杂(即如何进行面部识别)......也许我只是密集,但我可以似乎在如何做到这一点的逻辑上跳了起来.
另外我担心所有各种图像处理程序实际上都是处理器密集型的,我真的希望它尽可能轻量级(实际上我可能有很多按钮和字段,我试图在屏幕上找到......)
所以,我正在考虑这样做的方式是:
A)将位图转换为字节数组并执行强力搜索.(我知道该怎么做).然后
B)使用我找到的字节数组位置来计算它的屏幕位置(我真的不完全确定我是怎么做的)而不是使用图像处理的东西.
这完全是疯了吗?有没有人有一个简单的例子说明如何使用Aforge.Net或Emgu.CV来做到这一点?(或者如何充实上面的步骤B ......?)
谢谢!
您好我正在使用Orchard中的CyberStride.Contacts模块,并且一直在尝试向表单添加文件上传,但似乎某处存在问题,因为文件永远不会上传.有没有人成功地将文件上传添加到Orchard中的模块,如果是这样,你可以分享你是如何完成这个的.谢谢.
如果C++ STL包含二进制搜索树(BST)实现,或者我应该构建自己的BST对象,请知道吗?
如果STL没有实施BST,是否有可用的库?
我的目标是能够尽快找到所需的记录:我有一个记录列表(它不应该是几千个.),我在该列表中执行每帧(它的计算机游戏)搜索.我使用unsigned int作为我感兴趣的记录的标识符.无论什么方式,最快的将最适合我.
有没有办法看到写入事务日志的内容?
我有一个日志文件,在过去20分钟内增加了15个Gigs.有没有办法让我找出造成这种情况的原因?
没有邪恶的评估可以做这样的事情:
var str='MyClass';
eval('new '+str);
Run Code Online (Sandbox Code Playgroud)
我刚学会了PHP中的ReflectionClass ...谢谢.
我有一个伺服控制器正在移动物体越来越接近传感器,试图触发它.
我希望距离从 15.5 开始.但是,在每次迭代中,我希望它减小距离.1,直到传感器触发.为方便起见,我想退出while循环,并将变量$ currentHeight设置为此触发高度,因此我将减量行放在循环的beignning处.
但是,我必须在while循环之前对15.6起始点进行硬编码,以便它在循环的第一行中减少到15.5.
这似乎并不优雅.关于如何修饰它的任何建议?顺便说一句,对于你所有的老学校和晦涩的程序员来说,这是Tcl.;)
码:
set currrentDistance 15.6
set sensorStatus 4
while {$sensorStatus == 1)} {
set currentDistance [expr $currentDistance - .1]
moveServo $currentHeight
set sensorStatus [watchSensor 2]
}
Run Code Online (Sandbox Code Playgroud) 我在Windows 2008服务器上有一个批处理文件,当从命令行调用时工作正常.但是,当我将计划任务设置为运行此作业时,它无法正常工作.
任务计划程序确实显示任务正在定期运行,它不会显示任何错误.但是,批处理文件不会处理它应该处理的内容.
关于如何解决这个问题的任何想法都是最受欢迎的
batch-file scheduled-tasks windows-server-2008 windows-server-2008-x64
我的Visual Studio解决方案中有各种文件,如果我更改它,必须将其复制到bin/Debug文件夹中.
我试着设置Copy to Output Directory - Copy always但它不起作用.那么如何确保在构建这些文件时将其复制到bin/debug?
这是一个例子的屏幕截图:

c# ×3
.net ×2
android ×2
batch-file ×1
binary-tree ×1
c++ ×1
javascript ×1
memory ×1
orchardcms ×1
sikuli ×1
sql-server ×1
tcl ×1
wpf ×1