小编Sim*_*ert的帖子

Android了解堆大小

我是Android开发的新手,我似乎无法掌握Java Out of Memory异常.我知道这意味着我的应用程序已经超过了VM的预算,但经过Google搜索这么多次后,我似乎仍然没有掌握这个概念.我担心我的应用程序会占用太多内存,因为每个屏幕有六个按钮选择器,每个选择器有两个位图,根据属性选项卡每个大约20 kb.在我的根目录G2x上,我已将VM预算设置为12mb,重新启动了我的手机并运行了我的应用程序,没有任何问题.我在每个onDestroy()上取消绑定drawables并暗示GC也在这里运行.在模拟器中使用应用程序一段时间后,在我的DDMS屏幕上单击"原因GC",结果为ID = 1,堆大小6.133 MB,分配2.895MB,自由3.238 MB,%使用47.20,#对象52,623.

这是我不明白发生了什么,我的模拟器设置为24MB的VM.那个数字在哪里?我遇到的实际问题是,如果我将模拟器设置为16MB的VM,我的应用程序会因为内存不足异常而在第二个活动上崩溃.为什么我的手机上的VM设置为12 MB,或者我的旧HTC Magic手机上有12 MB的VM存量?你们还认为我的应用占用了太多内存吗?我不知道这些DDMS号码是否好.谢谢你的时间.

至于我的代码,我有XML布局中指定的每个图像,除了向它们添加侦听器之外,我不会以编程方式对它们执行任何操作.我在这里找到了这段代码,我已将它添加到我拥有的每个活动中......

@Override
protected void onDestroy() {
    super.onDestroy();

    unbindDrawables(findViewById(R.id.myRootLayout));
    System.gc();
}

private void unbindDrawables(View view) {
    if (view.getBackground() != null) {
        view.getBackground().setCallback(null);
    }
    if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            unbindDrawables(((ViewGroup) view).getChildAt(i));
        }
        ((ViewGroup) view).removeAllViews();
    }
}
Run Code Online (Sandbox Code Playgroud)

否则,我所做的就是将onClickListeners添加到具有PNG背景的按钮.我想学习如何以编程方式指定按钮背景,但我需要选择功能,如焦点,按下,非聚焦但按下等,以使按钮背景根据用户交互而变化.我已经回顾了关于这个的文档,但它看起来势不可挡,这就是为什么我认为我从这里开始管理堆的基础知识,并努力在代码中指定选择器.这可能没有意义但是有一个"健康"的内存分配量,应用程序可以分配而不会接近内存不足异常?例如,如果一个应用程序分配6MB应该没问题,但8MB会推动它,在内存分配方面有这样的界限吗?再次感谢Alex Lockwood的回复我将再次阅读并重新阅读,直到这些内容对我有意义

heap android virtual-machine dalvik ddms

30
推荐指数
2
解决办法
3万
查看次数

在android中以AM/PM格式显示时间

我正在使用时间选择器并使用以下代码在文本视图中显示时间...

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        Toast.makeText(SendMail.this, "Your Appointment time is "+hourOfDay+":"+minute,    Toast.LENGTH_SHORT).show();
        TextView datehid = (TextView)findViewById(R.id.timehidden);
        datehid.setText(String.valueOf(hourOfDay)+ ":"+(String.valueOf(minute)));
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,问题是当我将时间设置为晚上8点然后我将时间显示为20:0 ...我想将时间显示为晚上8点...我该怎么办?

android

10
推荐指数
4
解决办法
4万
查看次数

用于领域搜索的复杂排序,多个RealmResults的并集

我在我的开源Linux Command Library项目中用realm替换了sqlite.到目前为止,一切都很顺利,但现在我遇到了问题.

我正在使用RealmBaseAdapter通过搜索界面显示ListView中的所有命令.对于搜索,下面的域名命令结果如下:

查询: 测试

结果:

  • l2 测试
  • rc 测试
  • 测试
  • 测试 parm

    RealmResults<Command> commands = mRealm.where(Command.class).contains("name", query).findAll();
    mAdapter.updateRealmResults(commands);
    
    Run Code Online (Sandbox Code Playgroud)

使用旧的sqlite逻辑,顺序是这样的:

结果:

  • 测试
  • 测试 parm
  • l2 测试
  • rc 测试

return getReadableDatabase().rawQuery("Select * from " + CommandsDBTableModel.TABLE_COMMANDS + " WHERE " + CommandsDBTableModel.COL_NAME + " LIKE '%" + query + "%' " + "ORDER BY " + CommandsDBTableModel.COL_NAME + " = '" + query + "' DESC," + CommandsDBTableModel.COL_NAME + " LIKE '" + query + "%' DESC", null);

是否有可能用领域实现它?这是项目的链接https://github.com/SimonSchubert/LinuxCommandBibliotheca

sqlite android realm

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

如何使用Fresco读取assets目录中任何包的gif图像

我知道如何在本地包资源目录中读取gif图像.但现在我需要在其他包资源中阅读其他gif图像.例如主APP com.aaa.app读取资产中的com.bbb.app gif.我知道用

try {
    context = this.createPackageContext("com.bbb.app",
         Context.CONTEXT_IGNORE_SECURITY);
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

AssetManager am = context.getResources().getAssets();  
try {  
    InputStream is = am.open(fileName);  
    image = BitmapFactory.decodeStream(is);  
    is.close();  
} catch (IOException e) {  
    e.printStackTrace();  
} 
Run Code Online (Sandbox Code Playgroud)

阅读jpg/png,但我想阅读gif使用Fresco lib.谁知道怎么做?

android gif fresco

1
推荐指数
2
解决办法
3400
查看次数

标签 统计

android ×4

dalvik ×1

ddms ×1

fresco ×1

gif ×1

heap ×1

realm ×1

sqlite ×1

virtual-machine ×1