public class BitmapCache { static private BitmapCache cache; /** 用于Chche内容的存储 */ private Hashtable<Integer, MySoftRef> hashRefs; /** 垃圾Reference的队列(所引用的对象已经被回收,则将该引用存入队列中) */ private ReferenceQueue<Bitmap> q; /** * 继承SoftReference,使得每一个实例都具有可识别的标识。 */ private class MySoftRef extends SoftReference<Bitmap> { private Integer _key = 0; public MySoftRef(Bitmap bmp, ReferenceQueue<Bitmap> q, int key) { super(bmp, q); _key = key; } } private BitmapCache() { hashRefs = new Hashtable<Integer, MySoftRef>(); q = new ReferenceQueue<Bitmap>(); } /** * 取得缓存器实例 */ public static BitmapCache getInstance() { if (cache == null) { cache = new BitmapCache(); } return cache; } /** * 以软引用的方式对一个Bitmap对象的实例进行引用并保存该引用 */ private void addCacheBitmap(Bitmap bmp, Integer key) { cleanCache();// 清除垃圾引用 MySoftRef ref = new MySoftRef(bmp, q, key); hashRefs.put(key, ref); } /** * 依据所指定的drawable下的图片资源ID号(可以根据自己的需要从网络或本地path下获取),重新获取相应Bitmap对象的实例 */ public Bitmap getBitmap(int resId, Context context) { Bitmap bmp = null; // 缓存中是否有该Bitmap实例的软引用,如果有,从软引用中取得。 if (hashRefs.containsKey(resId)) { MySoftRef ref = (MySoftRef) hashRefs.get(resId); bmp = (Bitmap) ref.get(); } // 如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例, // 并保存对这个新建实例的软引用 if (bmp == null) { // 传说decodeStream直接调用JNI>>nativeDecodeAsset()来完成decode, // 无需再使用java层的createBitmap,从而节省了java层的空间。 bmp = BitmapFactory.decodeStream(context.getResources() .openRawResource(resId)); this.addCacheBitmap(bmp, resId); } return bmp; } private void cleanCache() { MySoftRef ref = null; while ((ref = (MySoftRef) q.poll()) != null) { hashRefs.remove(ref._key); } } /** * 清除Cache内的全部内容 */ public void clearCache() { cleanCache(); hashRefs.clear(); System.gc(); System.runFinalization(); } }
1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.
2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该功能的运行过程写出来.
3.要有自己的知识库,可以是一个工具类,把写过的,看过的好的代码放进去,也可以是一个笔记本软件.因为只有放在知识库里的东西,才是你最重要的财富.
4.如果你想做自由职业者,你需要学英语,因为在国外的盈利比国内多很多.如果你想进大公司,好公司,你需要学英语.你想深入学习android,但中文的android文章太少了,你查查百度,到处都是copy来copy去的hellword,所以,你需要学英语.如果你想出国,你需要学英语.
5.Http协议要研究透彻.http的信息头有什么信息,分别代表什么,信息体有什么信息,代表什么,都要搞的明明白白.scoket也是一样.
6.在eclipse里的layout文件都有graphical Layout.通过这个好好的把UI调整好.
7.Android里的junit每次运行都会打包新的apk到设备上跑.效率非常慢.如果是跟android无关的测试,最好自己建立一个单纯的java项目做测试.
8.面试的时候不要觉得自己提的薪水太高,物以稀为贵明白吗?不管你的期望薪资多少,都有可能实现,这只是时间问题.
9.如果一家小公司通过猎头找到你,即使公司在小,也比外面那些40,50人的公司还要好.不要觉得公司不行,担心会倒闭.放心吧,至少活1年是没问题的.
10.不要把自己绑在android上,有空也研究下IOS(最近小弟就准备研究ios,刚买了6本书...).
11.移动互联网最少还有10年的快速增长.android最少还有两年的快速增长.走android这条路是不会错的.
12.有空多学点开放平台的SDK.比如新浪微博,腾讯微博,淘宝平台,支付宝移动支付平台,快钱移动支付平台等等..这些都是不愁没市场的.
13.即使技术再差,也要发布一个应用到market上去.因为这样你才了解做一个应用的逻辑.
14.每个月拿到薪水省500-1000元出来.这些钱投在买学习资料,去培训班上课...在培训班,花再多的钱也是值得的.
15.你真正的价值在项目经验和对底层的认识上.不要忽略基础知识.
16.如果有空把Android的源代码看一下.底层的东西很枯燥,但这些很值得学.
17..程序员其实是艺术家.代码重构和设计模式,是非常非常重要的东西,必须要学
18.不要去维护一个项目,要去做一个项目.
19.一开始不要轻易去大公司,虽然大公司是可以让你呆一辈子的.但你的起点低,以后成就也低.
20:每天早上提前20分钟上班,5分钟把今天的工作计划写好.15分钟用来看各大It论坛的新闻.
21:如果以前没做过java,那就把SSH看下,自己搭建一个小服务器.这是为了接私活用.
22:PS一定要学,接私活用.
23:多下载市面上好的应用,每天都用,只有这样你才能了解市场.现在所有的APK都可以反编译,看源代码麻烦,但看layout和图片很容易,所以....你懂的.
24.要有羞耻心.
25.老板仅仅要求你把东西做完,需求完成.但你必须对自己要更严格一点.写一段代码,从网上复制一份代码,并不是可以用就行了,你还必须明白他的原理,为什么这样就可以?这才是对你最有用的地方,这也是你今后薪资增长的保证.
26.要懂得舍得.移动领域发展太快,必要时必须要用钱换时间.不然你会远远落后别人(我之前花了4000大洋去培训班学IOS三天).
27.要明白自己想要什么,什么才能最大性价比提高你的能力.对我来说,能让我提高最大的,就是Android和IOS同时会,并且自己可以做架构设计.
================================= 以下 03-12 =============================================
28.看android技术书籍最快的学习方法,先通读一次.然后把书本上的demo一个一个写出来.不要觉得太容易不去写.很多东西都是这样,看起来简单,但做起来难.最后再对照自己写出来的程序代码去理解书本的意思.
29.应用和游戏是2个方向,没有一个公司会同时做游戏又做应用,即使是外包公司,大多也只做一块.专精一个就可以了.
30.每次做完一个项目,要强迫自己做总结,通过这个项目,我学到了什么新技术?犯了哪些SB错误?
31.一家小公司,如果有正式财务部,那肯定是正规的,不要担心欠薪问题.如果没有,就说不准了.
In this tutorial i will be showing you how to save and load data in your applications
Features:
- 1 Label
- 1 Textfield
- 3 Buttons
Saving and loading data in apps is a major component for games such as saving high scores or loading progress or just generally enabling the user to save and load the data they created within you app
The Code
Play the video to get a step by step walkthrough and all code can be copy and pasted
ViewController.h
#import <UIKit/UIKit.h> @interface ViewController : UIViewController { __weak IBOutlet UITextField *textfield; __weak IBOutlet UILabel *label; } -(IBAction)save; -(IBAction)load; -(IBAction)settext; @end
ViewController.m
-(IBAction)save { NSString *savedstring = label.text; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:savedstring forKey:@"savedstring"]; [defaults synchronize]; } -(IBAction)load { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *loadstring = [defaults objectForKey:@"savedstring"]; [label setText:loadstring]; } -(IBAction)settext { label.text = textfield.text; }
视频: http://www.youtube.com/watch?feature=player_embedded&v=I0dP-sNbv94