Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android編程之Sdcard相關代碼集錦

Android編程之Sdcard相關代碼集錦

編輯:關於Android編程

本文實例講述了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程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved