【第一行代码笔记】(一)
Android 系統框架
1. Linux 內核層:為硬件提供底層的驅動,如顯示驅動,音頻驅動,照相機驅動,藍牙驅動。
2.系統運行庫層:通過C/C++庫來為android系統提供主要的特性支持,如SQLite庫提供數據庫的支持,OpenGL|ES庫提供了3D繪圖的支持,WebKit庫提供了瀏覽器內核的支持,同時,這一層還有Android運行時庫,Android運行時庫還包含了Dalvik虛擬機,它使得每一個Android應用都能運行在獨立的進程當中,并且擁有自己的Dalvik虛擬機實例。
3.應用框架層:提供構建應用程序可能用到的各種API.
4.應用層:所有安裝在手機上的應用
Android 四大組件
活動Activity,服務Service,廣播接收器Broadcast Receiver,內容提供者 Content Provider
在活動中使用Menu
首先在res下的menu文件夾下,新建xml文件,每個item標簽中定義一個菜單項
然后重寫onCreateOptionMenu(Menu menu)方法,
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}返回true表明允許創建的菜單顯示出來,如果返回了false,創建的菜單則無法顯示。
接下來定義菜單的響應事件。
public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case value:break;default:break;}return super.onOptionsItemSelected(item);}根據不同的id對不同的菜單項做出相應的響應。
使用Intent在活動之間穿梭
Intent是Android程序中各組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件指甲傳遞數據。Intent的用法大致可以分成兩種,顯式Intent和隱式Intent
1.使用顯式Intent
Intent(Context packageContext,Class<?> cls)
接受兩個參數,第一個參數 Context 要求提供一個啟動活動的上下文,第二個參數Class則是指定想要啟動的目標活動,通過這個構造函數就可以構造出Intent的意圖
通過startActivity(Intent intent)啟動目標活動
2.使用隱式Intent
不明確指出我們想要啟動哪一個活動,而是指定了一系列更為抽象的action和category等信息,然后交由系統去分析這個Intent并找出合適的活動去啟動。
什么叫合適的活動呢,簡單來講就是可以響應我們這個隱式Intent的活動,
通過在<activity>標簽下配置<intent-filter>的內容,可以指定當前活動能夠響應的action和category。只有<action>和<actegory>中的內容同時能夠匹配上Intent中指定的action和category時,這個活動才能響應該Intent
<category>標簽包含了一些附加信息,更精確的指明當前活動。
Intent intent = new Intent("android.intent.action.MAIN");這是Intent的另外一個構造函數,直接將action的字符串傳了進去。
每一個Intent中只能指定一個action,但卻能指定多個category
調用Intent中的addCategory()方法來添加一個category
?
使用隱式Intent不僅可以啟動自己程序內的活動,還可以啟動其他程序的活動,這使得Android多個應用程序之間的功能共享成為了可能。
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("https://www.baidu.com")); startActivity(intent);setData方法接收一個Uri對象,主要用于指定當前Intent正在操作的數據,而這些數據通常都是以字符串的形式傳入到Uri.parse()方法中解析產生的。
與此對應,我們還可以在<intent-filter>標簽中再配置一個<data>標簽,用于更精確地指定當前活動能響應什么類型的數據。<data>標簽中主要可以配置以下內容:
1.android:scheme:用于指定數據的協議部分
2.android:host:用于指定數據的主機名部分
3.android:port:用于指定數據的端口部分
4.android:path用于指定主機名和端口之后的部分
5.android:mimeType:用于指定可以處理的數據類型,允許使用通配符的方式進行指定
只有<data>標簽中的指定內容和Intent中攜帶額Data完全一致時,當前活動才能夠響應該Intent
?
button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("tel:10086"));startActivity(intent);}});點擊按鈕之后,會啟動撥號應用
?
向下一個活動傳遞數據
Intent中提供了一系列putExtra()方法的重載,可以把我們想要的傳遞的數據暫存在Intent中,啟動了另一個活動后,只需要把這些數據再從Intent中取出就可以了
String data = "Hello WebActivity";Intent intent = new Intent(MainActivity.this, WebActivity.class);intent.putExtra("extra_data", data);startActivity(intent); TextView tv = (TextView) findViewById(R.id.textView1);Intent intent = getIntent();String data = intent.getStringExtra("extra_data");tv.setText(data);返回數據給上一個活動
startActivityForResult()方法接收兩個參數,第一個參數是Intent,第二個參數是請求碼,用于在之后的回調中判斷數據的來源。
mainActiviyt
button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String data = "Hello WebActivity";Intent intent = new Intent(MainActivity.this, WebActivity.class);startActivityForResult(intent, 1);}});回調函數:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case 1:if (resultCode == RESULT_OK) {String returnedData = data.getStringExtra("data_extra");Toast.makeText(getApplicationContext(), returnedData,Toast.LENGTH_SHORT).show();}break;default:break;}}WebActivity.java
button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.putExtra("data_extra", "Hello MainActivity");setResult(RESULT_OK, intent);finish();}});setResult()方法接收兩個參數,第一個參數用于向上一個活動返回處理結果。一般只使用 RESULT_OK或者RESULT_CANCELED這兩個值,第二個參數則是把帶有數據的Intent傳遞回去
onActivityResult()方法帶有三個參數,第一個參數是requestCode,即我們在啟動活動時傳入的請求碼。第二個參數resultCode,即我們在返回數據時傳入的處理結果,第三個參數,data,即寫在這返回數據的Intent
首先通過檢查reaestCode的值來判斷數據來源,確定數據來源之后,再通過resultCode的值來判斷處理結果是否成功。
如果想通過back鍵返回數據,可以通過重寫onBackPressed()方法來解決問題
?
轉載于:https://www.cnblogs.com/six-moon/p/4642113.html
總結
以上是生活随笔為你收集整理的【第一行代码笔记】(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 对象创建及其继承的方法
- 下一篇: 最全解释P2P、P2C 、O2O 、B2