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