Android有用处理代码集锦-----Sdcard相关

来源:互联网 发布:端口范围1 65535 编辑:程序博客网 时间:2024/06/13 22:00

    1. 检测Sdcard是否可用:

public static boolean sdCardIsAvailable() {String status = Environment.getExternalStorageState();if (!status.equals(Environment.MEDIA_MOUNTED)) {return false;}return true;}

   2. 获得程序在sd卡上的cahce目录:

private static boolean hasExternalCacheDir() {return Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO;}/** * @param context  上下文 * @return The external cache dir  SD卡路径 */private static String getExternalCacheDir(Context context) {// android 2.2 以后才支持的特性if (hasExternalCacheDir()) {return context.getExternalCacheDir().getPath() + File.separator + "gesture";}// Before Froyo we need to construct the external cache dir ourselves// 2.2以前我们需要自己构造final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/gesture/";return Environment.getExternalStorageDirectory().getPath() + cacheDir;}

   3. 获取Sdcard的实际空间大小:

public static long getRealSizeOnSdcard() {File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath());StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();return availableBlocks * blockSize;}
        ----->检测Sdcard是否有足够的空间:

/** * @param updateSize  指定的检测空间大小 * @return True 空间足够返回true,不足返回false */public static boolean enoughSpaceOnSdCard(long updateSize) {String status = Environment.getExternalStorageState();if (!status.equals(Environment.MEDIA_MOUNTED))return false;return (updateSize < getRealSizeOnSdcard());}

   4. 获取手机的存储大小:

public static long getRealSizeOnPhone() {File path = Environment.getDataDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();long realSize = blockSize * availableBlocks;return realSize;}
      ---->检测手机存储是否有足够的空间: 

/** * @param updateSize 指定的检测空间大小 * @return 空间足够返回true,不足返回false */public static boolean enoughSpaceOnPhone(long updateSize) {return getRealSizeOnPhone() > 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.查看手机内存空间代码long freeMemory = 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 */private int getNavigationBarHeight() {int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");if (resourceId > 0) {    return getResources().getDimensionPixelSize(resourceId);}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝卖家手机版购买装修模块怎么办 天猫店铺和淘宝店铺想要装修怎么办 支付宝转账银行卡卡号错误怎么办 淘宝图片空间照片全部删除了怎么办 我把淘宝图片空间照片删除了怎么办 淘宝发布宝贝怎么没知道品牌怎么办 淘宝提前确认收货了怎么办已经发货 苹果支付安全提示问题忘记了怎么办 没有在规定日期交首付款怎么办 淘宝申请退款又不想退了怎么办 淘宝申请退款后又不想退了怎么办 申请退款后如果不想退了怎么办 世纪明德申请退款但不想退了怎么办 天猫申请换货商家不换怎么办 乐视手机刷机不想清除数据怎么办 捡的苹果手机刷机了要id怎么办 苹果6plus玩王者荣耀卡怎么办 华为荣耀3c的手机内存不足怎么办 红米4x玩王者荣耀卡怎么办 华为手机荣耀10一直重启怎么办 荣耀9青春版老自动重启怎么办 手机开不开机停在华为界面怎么办 华为荣耀9老是反复的重启怎么办 华为荣耀4x老是反复的重启怎么办 手机更新系统后开不了机怎么办 荣耀畅玩7x没有4g网络怎么办 华为4x数字解锁不对中怎么办 华为手机需要解锁后才能刷机怎么办 畅玩6x锁屏壁纸黑了怎么办 指纹密码解锁的手机解不开了怎么办 客户说物流太慢了要退货怎么办 天猫买的手机商家不给发票怎么办 天猫超市下单付款后缺货怎么办 淘宝卖家填写假的单号不发货怎么办 天猫商家72小时未发货怎么办 天猫精灵方糖不按顺序播放怎么办 在天猫购物已付款不发货怎么办 淘宝退货商家收到货不退款怎么办 被有实名认证的闲鱼卖家骗了怎么办 我收到了方正的提示函怎么办 淘宝刷q币单被骗了怎么办