欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程之Sdcard相關(guān)代碼集錦

 更新時間:2015年11月17日 14:42:18   作者:stevenhu_223  
這篇文章主要介紹了Android編程之Sdcard相關(guān)代碼集錦,包括Android針對sd卡的存取、檢測、相關(guān)信息獲取等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實(shí)例講述了Android編程之Sdcard相關(guān)代碼。分享給大家供大家參考,具體如下:

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以前我們需要自己構(gòu)造 
  final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/gesture/"; 
  return Environment.getExternalStorageDirectory().getPath() + cacheDir; 
} 

3. 獲取Sdcard的實(shí)際空間大小:

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. 獲取手機(jī)的存儲大?。?/p>

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

---->檢測手機(jī)存儲是否有足夠的空間:

/** 
* @param updateSize 指定的檢測空間大小 
* @return 空間足夠返回true,不足返回false 
*/ 
public static boolean enoughSpaceOnPhone(long updateSize) { 
  return getRealSizeOnPhone() > updateSize; 
} 

附帶點(diǎn)很久之前的記憶小贈品:

1. 在Android.mk中加入LOCAL_CERTIFICATE := platform就可以使用系統(tǒng)隱藏api(@hide)。

2.Activity的啟動模式總結(jié):

1). standard:

堆棧(task):與應(yīng)用程序的其他已啟動過的Activity在同一個堆棧

實(shí)例創(chuàng)建:每次啟動都會創(chuàng)建新的實(shí)例

2). singleTop:

堆棧(task):與應(yīng)用程序的其他已啟動過的Activity在同一個堆棧

實(shí)例創(chuàng)建:啟動時,檢查是否有該Activity的實(shí)例在當(dāng)前的棧頂(啟動過的記錄)。若有,則不再創(chuàng)建新實(shí)例,若無,則重新創(chuàng)建新實(shí)例,置于棧頂。

3). singleTask:

堆棧(task): 與應(yīng)用程序的其他已啟動過的Activity在同一個堆棧

實(shí)例創(chuàng)建:啟動時,檢查task中是否有該Activity的實(shí)例。若有,則將task中在該Activity實(shí)例之上的所有其他Activity實(shí)例統(tǒng)統(tǒng)出棧(pop),
 使其在棧頂。若無,則重新創(chuàng)建該Activity實(shí)例,置于棧頂。

4). singleInstance:

堆棧(task):與另外其他三種模式不同,會新建一個task,將Acitvity放置于這個新的task中,并保證不再有其他Activity實(shí)例進(jìn)入.

實(shí)例創(chuàng)建:第一次創(chuàng)建時,會新建一個task,將其至于新的task中。若實(shí)例已存在,在啟動時,無需再創(chuàng)建新實(shí)例,復(fù)用之前已創(chuàng)建的實(shí)例。

3.設(shè)置Activity的背景為手機(jī)桌面的背景:

在setContentView方法之前添加getWindow().setFlags(WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER, WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER),

然后在AndroidManifest.xml文件中添加android:theme="@android:style/Theme.Translucent"屬性,實(shí)現(xiàn)將該Activity設(shè)置為透明。

4.查看手機(jī)內(nèi)存空間代碼long freeMemory = Runtime.getRuntime().freeMemory();

5.關(guān)于Android主線程:

android中的主線程是UI線程,它是針對android中的UI組件操作的線程,而android中UI組件操作要求是非線程安全的,

畢竟UI組件的更新操作要求快速響應(yīng),如果更新時考慮線程安全,同步鎖等待響應(yīng)之類的,那么UI組件的更新響應(yīng)就有可能會延遲,
  這樣話就不符合Android要求盡可能規(guī)避的ANR異常。

6.Android4.4系統(tǒng)發(fā)布了一個ART運(yùn)行時,準(zhǔn)備用來替換掉之前一直使用的Dalvik虛擬機(jī),希望籍此解決飽受詬病的性能問題。

7. 引用相關(guān):

SoftReference<T>:軟引用-->當(dāng)虛擬機(jī)內(nèi)存不足時,將會回收它指向的對象;需要獲取對象時,可以調(diào)用get方法。

WeakReference<T>:弱引用-->隨時可能會被垃圾回收器回收。

softReference多用作來實(shí)現(xiàn)cache機(jī)制,weakReference一般用來防止內(nèi)存泄漏,要保證內(nèi)存被VM回收 .

8.TCP和UDP

由于面向連接的TCP協(xié)議在發(fā)生數(shù)據(jù)丟包時,會要求重傳,這會

影響視頻的實(shí)時性。UDP由于其是面向事務(wù)的,且簡單不可靠的傳輸協(xié)議,

在傳輸視頻數(shù)據(jù)當(dāng)中具有快捷,消耗資源小的特點(diǎn),簡單的傳輸過程中產(chǎn)生的

丟包和亂序是可以在視頻接收端處理的。所以一般采用UDP協(xié)議作為多媒體通信的傳輸層協(xié)議。

9.內(nèi)存相關(guān):

1). 一個進(jìn)程的內(nèi)存可以由2個部分組成:java 使用內(nèi)存 ,C 使用內(nèi)存 ,

這兩個內(nèi)存的和必須小于16M(16M是怎么來的?算是實(shí)驗(yàn)來的吧,每個機(jī)型不一樣,模擬器不同版本也不一樣,可以通過:
Runtime.getMaxMemory() 來查看。),不然就會出現(xiàn)大家熟悉的OOM,這個就是第一種OOM的情況。

2). 更加奇怪的是這個:一旦內(nèi)存分配給Java后,以后這塊內(nèi)存即使釋放后,也只能給Java的使用,這個估計(jì)跟java虛擬機(jī)里把內(nèi)存分成好幾塊進(jìn)行緩存的原因有關(guān),反正C就別想用到這塊的內(nèi)存了。

10.獲取底部虛擬按鍵高度(針對沒有物理按鍵的手機(jī)):

/** 
* 獲取底部虛擬按鍵高度(針對沒有物理按鍵的手機(jī)) 
* @return 
*/ 
private int getNavigationBarHeight() { 
  int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android"); 
  if (resourceId > 0) { 
   return getResources().getDimensionPixelSize(resourceId); 
  } 
  return 0; 
}

希望本文所述對大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評論