Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android常見問題總結(三)

Android常見問題總結(三)

編輯:關於Android編程

11. Android的數據存儲形式

在Android中的數據存儲形式主要有以下幾種:

SharedPreferrences

SharedPreferrences主要用於存儲一些少量的簡單的應用程序配置信息。SharedPreferrences以明文鍵值對的形式把數據存儲在一個xml文件上,該文件位於/data/data//shared_prefs目錄下。因此,SharedPreferrences只適合用於存儲一些簡單的數據,不適合存儲復雜的或敏感的數據。  

File

Android和Java一樣,同樣支持使用文件流來保存和訪問文件。除了在手機內置存儲空間上存儲文件外,Android還支持讀寫SD卡上的文件:只要獲取相應的權限後,調用Environment的getExternalStorageDirectory方法即可獲取路徑。  

SQLite數據庫

Android系統集成了一個輕量級的數據庫:SQLite。SQLite是一個嵌入式數據庫引擎,專門適用於資源有限的設備上適量數據的存取。在Android上我們一般使用SQLiteOpenHelper輔助類來操作SQLite數據庫。  

12. Sqlite的基本操作

SQLite為熟悉SQL語句的程序員提供了相應的函數使用SQL語句,也為不了解SQL語法的程序員提供了簡便的增刪查改接口:
String path = "數據庫路徑";
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(path, null);
// 執行sql語句
database.execSQL(sql);
// 執行帶占位符的sql語句
database.execSQL(sql, bindArgs);
// 執行查找的sql語句
database.rawQuery(sql, selectionArgs);

// 執行增刪查改
database.insert(table, nullColumnHack, values);
database.delete(table, whereClause, whereArgs);
database.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
database.update(table, values, whereClause, whereArgs);

// 開啟事務
database.beginTransaction();
// 確認事務成功
database.setTransactionSuccessful();
// 結束事務
database.endTransaction();

13. Android中的MVC模式

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。 MVC模式的示意圖如下: \ (圖片源自百度百科)   Android的設計也使用了MVC模式,其中: View對應於Android的View控件和xml所編寫的界面Control對應於Android中的Activity,負責接收用戶請求和改變模型狀態Model一般由我們自己實現來處理程序功能和邏輯  

14. Merge、ViewStub的作用

Merge和ViewStub均為Android中的xml優化標簽,用於對Android的View布局進行優化。

Merge

merge標簽應用於xml的頂層標簽,主要應對於layout嵌套浪費的現象。在Android layout文件中需要一個頂級容器來容納其他的組件,而不能直接放置多個組件,通過使用merge標簽作為頂層容器,我們可以刪減多余或者額外的層級,從而優化整個Android Layout的結構。   以下是一個例子: activity_merge_test.xml:

<framelayout android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android">
    
    

    
    
</framelayout>

 
MergeTestActivity:
public class MergeTestActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_merge_test);
	}
}

效果圖如下: merge效果圖   由hierarchyviewer分析可得(此處只分析與Activity界面相關的部分): hierarchyviewer分析   由hierarchyviewer得到的View樹狀圖我們可以發現,id為content的FrameLayout中只有LinearLayout一個元素,造成了layout的嵌套浪費(如紅框圈出所示)。此處我們若使用merge標簽,便可以減少一層layout標簽的嵌套,使程序運行得更快更流暢。   xml代碼改為如下:


    
    

    
    


效果圖沒有變化,使用hierarchyviewer分析可得: hierarchyviewer優化後 此時已經減少了一層layout嵌套,我們通過使用merge標簽,達到了優化的目的。  

ViewStub

ViewStub即占位符,用於處理動態覺得顯示某個View的情況。在開發應用程序的時候,我們經常會在運行時動態根據條件來決定顯示哪個View或某個布局。那麼最通常的想法就是把可能用到的View都寫在上面,先把它們的可見性都設為View.GONE,然後在代碼中動態的更改它的可見性。這樣的做法的優點是邏輯簡單而且控制起來比較靈活。但是它的缺點就是,耗費資源。雖然把View的初始可見View.GONE但是在Inflate布局的時候View仍然會被Inflate,也就是說仍然會創建對象,會被實例化,會被設置屬性。也就是說,會耗費內存等資源。而使用ViewStub的話在inflate布局的時候不會被inflate,ViewStub的inflate操作被延遲到了直到我們調用其inflate方法。   ViewStub的xml文件設置如下:
    

其中,inflateId屬性表示ViewStub被inflate後重新被賦予的id值,layout屬性指定了調用inflate方法時inflate的具體布局。   找到ViewStub並調用inflate:
ViewStub viewStub = (ViewStub)findViewById(R.id.view_stub);
viewStub.inflate();

值得注意的是: ViewStub只能Inflate一次,之後ViewStub對象會被置為空。按句話說,某個被ViewStub指定的布局被Inflate後,就不會夠再通過ViewStub來控制它了。
ViewStub只能用來Inflate一個布局文件,而不是某個具體的View。
 

15. Json有什麼優劣勢

JSON,即JavaScript Object Notation,是一種輕量級的數據交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案(有點類似於正則表達式 ,獲得了當今大部分語言的支持),從而可以在不同平台間進行數據交換。JSON采用兼容性很高的文本格式,同時也具備類似於C語言體系的行為。這些特性使JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網絡傳輸速率)。   Json優點: 與傳統的xml相比,Json有一下優點: 在解碼難度方面,XML的解析得考慮子節點父節點,而Json不需要,解析難度較低
Json數據的體積小
Json的傳輸速度快於XML
但Json也有它不足之處: 沒有XML格式這麼推廣的深入人心和使用廣泛, 沒有XML那麼通用性
命名空間允許不同上下文中的相同的信息段彼此混合,然而在Json中已經找不到了命名空間
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved