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