Android編程之Sdcard相關(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ì)有所幫助。
- Android開發(fā)之資源目錄assets與res/raw的區(qū)別分析
- Android讀取assets目錄下的所有圖片并顯示的方法
- android讀取Assets圖片資源保存到SD卡實(shí)例
- 基于android中讀取assets目錄下a.txt文件并進(jìn)行解析的深入分析
- Android實(shí)現(xiàn)內(nèi)存中數(shù)據(jù)保存到sdcard的方法
- Android實(shí)現(xiàn)把文件存放在SDCard的方法
- android中把文件保存到sdcard代碼實(shí)例
- Android中刪除sdcard里文件的命令
- Android獲取SD卡路徑及SDCard內(nèi)存的方法
- Android對sdcard擴(kuò)展卡文件操作實(shí)例詳解
- Android編程讀取Assets所有文件(遍歷每一個文件夾)并存入sdcard的方法
相關(guān)文章
Android實(shí)現(xiàn)取消GridView中Item選中時默認(rèn)的背景色
這篇文章主要介紹了Android實(shí)現(xiàn)取消GridView中Item選中時默認(rèn)的背景色,涉及Android GridView中Item屬性設(shè)置的相關(guān)技巧,需要的朋友可以參考下2016-02-02Flutter自定義實(shí)現(xiàn)神奇動效的卡片切換視圖的示例代碼
這篇文章主要介紹了Flutter自定義實(shí)現(xiàn)神奇動效的卡片切換視圖的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04flutter實(shí)現(xiàn)底部導(dǎo)航欄
這篇文章主要為大家詳細(xì)介紹了flutter實(shí)現(xiàn)底部導(dǎo)航欄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Flutter檢查連接網(wǎng)絡(luò)connectivity_plus實(shí)現(xiàn)步驟
這篇文章主要為大家介紹了Flutter檢查連接網(wǎng)絡(luò)connectivity_plus實(shí)現(xiàn)步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06C/C++在Java、Android和Objective-C三大平臺下實(shí)現(xiàn)混合編程
本文主要介紹C/C++在Java、Android和Objective-C三大平臺下實(shí)現(xiàn)混合編程,這里舉例說明實(shí)現(xiàn)不同平臺用C/C++實(shí)現(xiàn)編程的方法,有興趣的小伙伴可以參考下2016-08-08Android開發(fā)中比較耗時的一些操作小結(jié)
這篇文章主要介紹了Android開發(fā)中比較耗時的一些操作小結(jié),本文根據(jù)實(shí)際開發(fā)經(jīng)驗(yàn)總結(jié)了6條比較耗時的編程操作,請大家注意下,需要的朋友可以參考下2015-06-06Android組件實(shí)現(xiàn)長按彈出上下文菜單功能的方法
這篇文章主要介紹了Android組件實(shí)現(xiàn)長按彈出上下文菜單功能的方法,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)長按彈出上下文菜單的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-07-07Android事件分發(fā)機(jī)制?ViewGroup分析
這篇文章主要介紹了Android事件分發(fā)機(jī)制?ViewGroup分析,事件分發(fā)從手指觸摸屏幕開始,即產(chǎn)生了觸摸信息,被底層系統(tǒng)捕獲后會傳遞給Android的輸入系統(tǒng)服務(wù)IMS,更多相關(guān)介紹,需要的朋友可以參考一下2022-09-09