当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于Bit地图(网下搜集的,并未验证)        关于Bitmap(网上搜集的,并未验证) 1) Bitmap recycle作用   一个图片加载到内存里,其实是有两部分数据组成,一部分是图片的相关描述信息,另一部分就是最重要的像素信息(这部分是有b.........
    ▪ PreferenceScreen 偏好展示类 的使用        PreferenceScreen 偏好显示类 的使用 PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 “偏好显示”,明白这个意思就好,就是说根据特点灵活的定义显示内容风格,一个屏.........
    ▪ lordhong大神跟CocoaChina联袂推荐的一本iPad教程       lordhong大神和CocoaChina联袂推荐的一本iPad教程 lordhong大神可谓是JE上的教父级人物,令无数像我们这样的小程序员膜拜。   在我的印象中,lordhong是非常谨慎的一个人,这次他破例给国内的iPad.........

[1]关于Bit地图(网下搜集的,并未验证)
    来源: 互联网  发布时间: 2014-02-18
关于Bitmap(网上搜集的,并未验证)

1) Bitmap recycle作用

 

一个图片加载到内存里,其实是有两部分数据组成,一部分是图片的相关描述信息,另一部分就是最重要的像素信息(这部分是有byte数组组成 的),android系统为了提高对图片的处理效率,对于图片的处理都是调用了底层的功能(由C语言实现的),也就是说一个图片加载到内存里后是使用两部 分的内存区域,简单的说:一部分是java可用的内存区,一部分是c可用的内存区,这两个内存区域是不能相互直接使用的,
这个bitmap对象是有java分配的,当然不用的时候系统会自动回收了,可是那个对应的C可用的内存区域jvm是不能直接回收的,这个只能调用底层的功能释放。所以你要调用recycle方法来释放那一部分内存。

 

 

2) Bitmap是否有调用recycle方法的必要性?

 

嵌入式系统总是格外注重空间的问题,不小心的话就会有OOM。但是应用层使用java的android平台有其天然的优势【java语言有自己的垃圾回收,android平台上各个application有自己的process自己的空间】。

无需调用bitmap的理由有:
   a. 垃圾回收会处理的;
   b. 当application关闭,process被杀掉,所有这个process占用的空间自然回归系统;

    但是,如果你有点洁癖,或者有点理想主义,或者很有控制欲,或者很闲。。。bitmap的recycle函数的调用还是可以是有必要的,理由有:
   a. 垃圾回收虽然好使,但是有可能的话,我们还是让它少干点活吧。垃圾回收有很大的未来不确定性,会加重未来未知时间点的loading,若有大量bitmap需要垃圾回收处理,那必然垃圾回收需要做的次数就更多也发生地更频繁,小心会造成ANR。但是,若是自己recycle,就可以可控制地分散处理了这些回收任务了。
   b. 若是launcher那样一直运行的application,它的process一直存在,memory问题还是多多注意下比较好。

 

3) 何时调用?

 

Timing的问题在这里很重要。早了就大事不好了,会有这样的Exception:
    java.lang.RuntimeException,Canvas: trying to use a recycled bitmap
    android.graphics.Bitmap@44ebeee0,Canvas.java,955

    So, 怎样才可以保证不会早了呢?

    关于图片显示,重要的时间点:

    step1: 设置进去的时间点;

    Step2: 画面画出来的时间点;

    最保险最笨的做法,在新的图片设置进去以后再recycle掉老的图片,这样做的坏处在于,在某个时间段,你需要的空间是double的【新旧两套都在】;

    如果你不偏向于那么做,又有时间,可以考虑后面一个时间点,除了setImage以及其它代码中显示调用那个bitmap的时候我们会检查bitmap,在acticvity变为visible的时候系统还是会去找之前设置进去的bitmap【即使你的onResume方法里面并没有提到去refresh UI,这件事情它也是会去做的,大概不然它就不知道这次该显示些什么了】。所以,在UI线程里面,在一个不可能被打断的方法里面,是先设置新的bitmap还是先recycle旧的图片是没有影响的。

    譬如说     mBitmap.recycle();

                  mBitmap = .....   //设置

                  mImageView.setImage(mBitmap);

    这样的代码是完全可以的。

    后面这样的做法,最重要的就是确保:在UI线程【因为设置UI显示只能在UI主线程里】里面一个不可能被打断的方法里面。这个是为了确保在两者之间UI主线程不可能被打断,不可能刚好从invisible变成visible。

    所以,特别小心两种东西:

    1. 多线程【个人觉得最好不要在其他线程里面调用UI用过的bitmap的recycle方法,多线程之间是很难保证时间顺序的,暂时没有想出一种在background thread里面recycle的合理的方式】;

    2. 非及时发生的方法:譬如,发intent啊,发notify啊去通知UI主线程去做UI重新刷新并不能替代mImageView.setImage(mBitmap);这样的句子。完全有可能,你确实发了intent出去了,但是目标activity之一还没有做UI重新设置【Q: maybe没收到 or 收到但还是等待处理,不确定这两种可能是不是都有可能】,这个时候这个acitivity变成visible了,系统仍然试图找旧的图片,找不到了就会报exception了。


    
[2] PreferenceScreen 偏好展示类 的使用
    来源: 互联网  发布时间: 2014-02-18
PreferenceScreen 偏好显示类 的使用
PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 “偏好显示”,明白这个意思就好,就是说根据特点灵活的定义显示内容风格,一个屏幕可以包含多个风格,像系统自带的声音设置界面。

实现这种显示效果其实很简单,只需要借助PreferenceScreen类即可。在项目资源文件中新建xml文件夹,在里面新建preferences.xml文件.
根元素为PreferenceScreen 代表显示一整个屏幕,内部嵌套PreferenceCategory标签,表示偏好类别,在PreferenceCategory标签内部可以随便存放复选框,输入框,列表等显示控件.可包含的控件内容在android.preference包下可查阅.xml文件编写好后,需要加载到activity中,对于偏好显示的xml加载,可以使用PreferenceActivity中的addPreferencesFromResource(),所以Activity需要继承PreferenceActivity.既然显示的屏幕中包含复选框,输入框的控件,我们必然对选择与否,输入框内容感兴趣,我们要怎样获取屏幕的内容呢?
复写activity中的onPreferenceTreeClick 方法,在对屏幕显示的内容进行操作时,会触发此方法,在方法内部通过调用
 SharedPreferences contentPreference = preference.getSharedPreferences();
		 boolean checkbox_toggle = contentPreference.getBoolean("checkbox_preference", false);
		 String animalName = contentPreference.getString("edittext_preference", "default");

即可得到屏幕上输入的内容,与使用SharedPreference对象一样,通过key-value 的形式获取,其中key是xml控件标签中key属性对应的值.
显示效果:

对应xml文件:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
            android:title="显示一排偏好">
        <CheckBoxPreference
                android:key="checkbox_preference"
                android:title="开关偏好"
                android:summary="这是一个开关按钮" />
    </PreferenceCategory>
    <PreferenceCategory
            android:title="基于对话框的偏好">
        <EditTextPreference
                android:key="edittext_preference"
                android:title="文本输入偏好"
                android:summary="使用一个文本框对话框"
                android:dialogTitle="输入你的宠物" />
        <ListPreference
                android:key="list_preference"
                android:title="列表偏好"
                android:summary="使用一个列表对话框"
                android:entries="@array/entries_list_preference"
                android:entryValues="@array/entryvalues_list_preference"
                android:dialogTitle="选择一个" />
    </PreferenceCategory>
    <PreferenceCategory
            android:title="启动偏好">
        <PreferenceScreen
                android:key="screen_preference"
                android:title="屏幕"
                android:summary="显示另一个偏好屏幕">
            
            <!-- You can place more preferences here that will be shown on the next screen. -->
                     
            <CheckBoxPreference
                    android:key="next_screen_checkbox_preference"
                    android:title="开关偏好"
                    android:summary="另一个屏幕上的偏好" />
        </PreferenceScreen>

        <PreferenceScreen
                android:title="意图偏好"
                android:summary="通过意图启动一个Activity">
            <intent android:action="/blog_article/android.intent.action.VIEW"
                    android:data="http://www.android.com" />
        </PreferenceScreen>
    </PreferenceCategory>
    <PreferenceCategory
            android:title="偏好属性">
        <CheckBoxPreference
                android:key="parent_checkbox_preference"
                android:title="父开关"
                android:summary="这是一个父开关" />
        <CheckBoxPreference
                android:key="child_checkbox_preference"
                android:dependency="parent_checkbox_preference"
                android:layout="?android:attr/preferenceLayoutChild"
                android:title="子开关"
                android:summary="这是一个子开关" />
    </PreferenceCategory>
</PreferenceScreen>

    
[3] lordhong大神跟CocoaChina联袂推荐的一本iPad教程
    来源: 互联网  发布时间: 2014-02-18
lordhong大神和CocoaChina联袂推荐的一本iPad教程

lordhong大神可谓是JE上的教父级人物,令无数像我们这样的小程序员膜拜。

 

在我的印象中,lordhong是非常谨慎的一个人,这次他破例给国内的iPad开发者推荐了一本书:《iPad应用开发实战》,如果学习的朋友可以关注一下。

 

样章连载:http://www.iteye.com/wiki/hzbook/3082-iPad-iOS

 

我只是诚心想给那些需要学习而又找不到好的资料的朋友推荐一本好书,如果大家觉得这本书不好,请大家投我的隐藏贴,如果大家觉得不错,就给加个精华吧,谢谢大家。

1 楼 lucane 2011-04-29  
lordhong已经好久木有见他在JE了啊

2 楼 ray_linn 2011-04-30  
水分太大了...甩干一下,出本30元的书可也。
3 楼 sarstime 2011-05-05  
lordhong 本人咋不出来现身说法?谁知道lz说的是真是假。
4 楼 linux1689 2011-05-06  
这个是真的,我保证,不信你去大神的新浪微博看看。
5 楼 gulfer 2011-05-09  
260多页买50多块钱可是有点贵。。。
6 楼 linux1689 2011-05-10  
全书接近300页,而不是260页哦,这个价格还算公道,大家想象,55再打七折是多少钱,这些钱咱们出去能干啥,吃顿快餐都不够啊,但是这样一本书却凝聚了作者和出版社无数人的心血和劳动,而且它带给你的价值也许是无法估量的。

在国内,绝大多数读者还是习惯于把书的价值与它的厚度直接关联起来,卖书还是卖纸,是个问题。
7 楼 ye_jian_hui 2011-05-10  
现在“大神”的标准都变得这么低了?
8 楼 linux1689 2011-05-10  
ye_jian_hui 写道
现在“大神”的标准都变得这么低了?


说话负点责任好吗?像你这样说话,不仅是不尊重作者的劳动,也是对大神的不敬啊!

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3