Android编程之Sdcard相关代码集锦
本文实例讲述了Android编程之Sdcard相关代码。分享给大家供大家参考,具体如下:
1.检测Sdcard是否可用:
publicstaticbooleansdCardIsAvailable(){ Stringstatus=Environment.getExternalStorageState(); if(!status.equals(Environment.MEDIA_MOUNTED)){ returnfalse; } returntrue; }
2.获得程序在sd卡上的cahce目录:
privatestaticbooleanhasExternalCacheDir(){ returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.FROYO; } /** *@paramcontext上下文 *@returnTheexternalcachedirSD卡路径 */ privatestaticStringgetExternalCacheDir(Contextcontext){ //android2.2以后才支持的特性 if(hasExternalCacheDir()){ returncontext.getExternalCacheDir().getPath()+File.separator+"gesture"; } //BeforeFroyoweneedtoconstructtheexternalcachedirourselves //2.2以前我们需要自己构造 finalStringcacheDir="/Android/data/"+context.getPackageName()+"/cache/gesture/"; returnEnvironment.getExternalStorageDirectory().getPath()+cacheDir; }
3.获取Sdcard的实际空间大小:
publicstaticlonggetRealSizeOnSdcard(){ Filepath=newFile(Environment.getExternalStorageDirectory().getAbsolutePath()); StatFsstat=newStatFs(path.getPath()); longblockSize=stat.getBlockSize(); longavailableBlocks=stat.getAvailableBlocks(); returnavailableBlocks*blockSize; }
----->检测Sdcard是否有足够的空间:
/** *@paramupdateSize指定的检测空间大小 *@returnTrue空间足够返回true,不足返回false */ publicstaticbooleanenoughSpaceOnSdCard(longupdateSize){ Stringstatus=Environment.getExternalStorageState(); if(!status.equals(Environment.MEDIA_MOUNTED)) returnfalse; return(updateSize<getRealSizeOnSdcard()); }
4.获取手机的存储大小:
publicstaticlonggetRealSizeOnPhone(){ Filepath=Environment.getDataDirectory(); StatFsstat=newStatFs(path.getPath()); longblockSize=stat.getBlockSize(); longavailableBlocks=stat.getAvailableBlocks(); longrealSize=blockSize*availableBlocks; returnrealSize; }
---->检测手机存储是否有足够的空间:
/** *@paramupdateSize指定的检测空间大小 *@return空间足够返回true,不足返回false */ publicstaticbooleanenoughSpaceOnPhone(longupdateSize){ returngetRealSizeOnPhone()>updateSize; }
附带点很久之前的记忆小赠品:
1.在Android.mk中加入LOCAL_CERTIFICATE:=platform就可以使用系统隐藏api(@hide)。
2.Activity的启动模式总结:
1).standard:
堆栈(task):与应用程序的其他已启动过的Activity在同一个堆栈
实例创建:每次启动都会创建新的实例
2).singleTop:
堆栈(task):与应用程序的其他已启动过的Activity在同一个堆栈
实例创建:启动时,检查是否有该Activity的实例在当前的栈顶(启动过的记录)。若有,则不再创建新实例,若无,则重新创建新实例,置于栈顶。
3).singleTask:
堆栈(task):与应用程序的其他已启动过的Activity在同一个堆栈
实例创建:启动时,检查task中是否有该Activity的实例。若有,则将task中在该Activity实例之上的所有其他Activity实例统统出栈(pop),
使其在栈顶。若无,则重新创建该Activity实例,置于栈顶。
4).singleInstance:
堆栈(task):与另外其他三种模式不同,会新建一个task,将Acitvity放置于这个新的task中,并保证不再有其他Activity实例进入.
实例创建:第一次创建时,会新建一个task,将其至于新的task中。若实例已存在,在启动时,无需再创建新实例,复用之前已创建的实例。
3.设置Activity的背景为手机桌面的背景:
在setContentView方法之前添加getWindow().setFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER,WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER),
然后在AndroidManifest.xml文件中添加android:theme="@android:style/Theme.Translucent"属性,实现将该Activity设置为透明。
4.查看手机内存空间代码longfreeMemory=Runtime.getRuntime().freeMemory();
5.关于Android主线程:
android中的主线程是UI线程,它是针对android中的UI组件操作的线程,而android中UI组件操作要求是非线程安全的,
毕竟UI组件的更新操作要求快速响应,如果更新时考虑线程安全,同步锁等待响应之类的,那么UI组件的更新响应就有可能会延迟,
这样话就不符合Android要求尽可能规避的ANR异常。
6.Android4.4系统发布了一个ART运行时,准备用来替换掉之前一直使用的Dalvik虚拟机,希望籍此解决饱受诟病的性能问题。
7.引用相关:
SoftReference<T>:软引用-->当虚拟机内存不足时,将会回收它指向的对象;需要获取对象时,可以调用get方法。
WeakReference<T>:弱引用-->随时可能会被垃圾回收器回收。
softReference多用作来实现cache机制,weakReference一般用来防止内存泄漏,要保证内存被VM回收.
8.TCP和UDP
由于面向连接的TCP协议在发生数据丢包时,会要求重传,这会
影响视频的实时性。UDP由于其是面向事务的,且简单不可靠的传输协议,
在传输视频数据当中具有快捷,消耗资源小的特点,简单的传输过程中产生的
丢包和乱序是可以在视频接收端处理的。所以一般采用UDP协议作为多媒体通信的传输层协议。
9.内存相关:
1).一个进程的内存可以由2个部分组成:java使用内存,C使用内存,
这两个内存的和必须小于16M(16M是怎么来的?算是实验来的吧,每个机型不一样,模拟器不同版本也不一样,可以通过:
Runtime.getMaxMemory()来查看。),不然就会出现大家熟悉的OOM,这个就是第一种OOM的情况。
2).更加奇怪的是这个:一旦内存分配给Java后,以后这块内存即使释放后,也只能给Java的使用,这个估计跟java虚拟机里把内存分成好几块进行缓存的原因有关,反正C就别想用到这块的内存了。
10.获取底部虚拟按键高度(针对没有物理按键的手机):
/** *获取底部虚拟按键高度(针对没有物理按键的手机) *@return */ privateintgetNavigationBarHeight(){ intresourceId=getResources().getIdentifier("navigation_bar_height","dimen","android"); if(resourceId>0){ returngetResources().getDimensionPixelSize(resourceId); } return0; }
希望本文所述对大家Android程序设计有所帮助。