当前位置: 移动技术网 > IT编程>移动开发>Android > Android编程之Sdcard相关代码集锦

Android编程之Sdcard相关代码集锦

2019年07月24日  | 移动技术网IT编程  | 我要评论

烟花厂,7v,奥奇传说圣光飞龙

本文实例讲述了android编程之sdcard相关代码。分享给大家供大家参考,具体如下:

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; 
}

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网