andriod dayo1

1.所有以drawable開頭的文件夾都是用來放圖片的笑跛,所有以mipmap開頭的文件夾都是用來放應(yīng)用圖標(biāo)的,所有以values開頭的文件夾都是用來放字符串站蝠、樣式揍魂、顏色等配置的,layout文件夾是用來放布局文件的

2.但是我們應(yīng)該自己創(chuàng)建drawable-hdpi檩电、drawable-xhdpi拄丰、drawable-xxhdpi等文件夾府树。在制作程序的時候最好能夠給同一張圖片提供幾個不同分辨率的版本,分別放在這些文件夾下料按,然后當(dāng)程序運行的時候奄侠,會自動根據(jù)當(dāng)前運行設(shè)備分辨率的高低選擇加載哪個文件夾下的圖片。當(dāng)然這只是理想情況载矿,更多的時候美工只會提供給我們一份圖片垄潮,這時你就把所有圖片都放在drawable-xxhdpi文件夾下就好了

3.gradle

Gradle是一種構(gòu)建工具,它可以幫你管理項目中的差異,依賴,編譯,打包,部署......,你可以定義滿足自己需要的構(gòu)建邏輯,寫入到build.gradle中供日后復(fù)用.

Gradle不是一種編程語言,它不能幫你實現(xiàn)軟件中的任何實際功能

4.根項目build.gradle

兩處repositories的閉包中都聲明了jcenter()這行配置,那么這個jcenter是什么意思呢闷盔?其實它是一個代碼托管倉庫弯洗,很多Android開源項目都會選擇將代碼托管到j(luò)center上,聲明了這行配置之后逢勾,我們就可以在項目中輕松引用任何jcenter上的開源項目了牡整。

接下來,dependencies閉包中使用classpath聲明了一個Gradle插件溺拱。為什么要聲明這個插件呢逃贝?因為Gradle并不是專門為構(gòu)建Android項目而開發(fā)的,Java迫摔、C++等很多種項目都可以使用Gradle來構(gòu)建沐扳。因此如果我們要想使用它來構(gòu)建Android項目,則需要聲明com.android.tool […]

這樣我們就將最外層目錄下的build.gradle文件分析完了攒菠,通常情況下你并不需要修改這個文件中的內(nèi)容迫皱,除非你想添加一些全局的項目構(gòu)建配置

5.app moudle的build.gradle

?1.com.android.application表示這是一個應(yīng)用程序模塊歉闰,com.android.library表示這是一個庫模塊辖众。應(yīng)用程序模塊和庫模塊的最大區(qū)別在于,一個是可以直接運行的和敬,一個只能作為代碼庫依附于別的應(yīng)用程序模塊來運行

6.如果你需要在XML中引用一個id凹炸,就使用@id/id_name這種語法,而如果你需要在XML中定義一個id昼弟,則要使用@+id/id_name這種語法

7.項目中添加的任何資源都會在R文件中生成一個相應(yīng)的資源id

8.在<activity>標(biāo)簽中我們使用了android:name來指定具體注冊哪一個活動啤它,那么這里填入的.FirstActivity是什么意思呢?其實這不過就是com.example.activitytest.FirstActivity的縮寫而已舱痘。由于在最外層的<manifest>標(biāo)簽中已經(jīng)通過package屬性指定了程序的包名是com.example.activitytest变骡,因此在注冊活動時這一部分就可以省略了,直接使用.FirstActivity就足夠了

9.給主活動指定的label不僅會成為標(biāo)題欄中的內(nèi)容芭逝,還會成為啟動器(Launcher)中應(yīng)用程序顯示的名稱

10.Activity類提供了一個finish()方法塌碌,我們在活動中調(diào)用一下這個方法就可以銷毀當(dāng)前活動了

11.Android應(yīng)用程序資源可以分為兩大類,分別是assets和res旬盯,詳細(xì)看http://www.reibang.com/p/87930a20a4a8

12.Intent大致可以分為兩種:顯式Intent和隱式Intent台妆,我們先來看一下顯式Intent如何使用翎猛。

? 1.Intent有多個構(gòu)造函數(shù)的重載,其中一個是Intent(Context packageContext, Class<?> cls)接剩。這個構(gòu)造函數(shù)接收兩個參數(shù)切厘,第一個參數(shù)Context要求提供一個啟動活動的上下文,第二個參數(shù)Class則是指定想要啟動的目標(biāo)活動懊缺,通過這個構(gòu)造函數(shù)就可以構(gòu)建出Intent的“意圖”疫稿。然后我們應(yīng)該怎么使用這個Intent呢?Activity類中提供了一個startActivity()方法鹃两,這個方法是專門用于啟動活動的而克,它接收一個Intent參數(shù),這里我們將構(gòu)建好的Intent傳入startActivity()方法就可以啟動目標(biāo)活動了button1.setOnClickListener(new View.OnClickListener() {

? ? @Override

? ? public void onClick(View v) {

? ? ? ? Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

? ? ? ? startActivity(intent);

? ? }});

? ?2.比于顯式Intent怔毛,隱式Intent則含蓄了許多员萍,它并不明確指出我們想要啟動哪一個活動,而是指定了一系列更為抽象的action和category等信息拣度,然后交由系統(tǒng)去分析這個Intent碎绎,并幫我們找出合適的活動去啟動

? ?3.每個Intent中只能指定一個action,但卻能指定多個category抗果。目前我們的Intent中只有一個默認(rèn)的category,調(diào)用Intent中的addCategory()方法來添加一個category;android.intent.category.DEFAULT是一種默認(rèn)的category筋帖,在調(diào)用startActivity()方法的時候會自動將這個category添加到Intent中;

4.使用隱式Intent,我們不僅可以啟動自己程序內(nèi)的活動冤馏,還可以啟動其他程序的活動日麸,這使得Android多個應(yīng)用程序之間的功能共享成為了可能。比如說你的應(yīng)用程序中需要展示一個網(wǎng)頁逮光,這時你沒有必要自己去實現(xiàn)一個瀏覽器(事實上也不太可能)代箭,而是只需要調(diào)用系統(tǒng)的瀏覽器來打開這個網(wǎng)頁就行了

5.Intent中提供了一系列putExtra()方法的重載,可以把我們想要傳遞的數(shù)據(jù)暫存在Intent中涕刚,啟動了另一個活動后嗡综,只需要把這些數(shù)據(jù)再從Intent中取出就可以了

13.返回數(shù)據(jù)給上一個活動,A->B

? ? 1.A使用startActivityForResult杜漠,startActivityForResult()方法也是用于啟動活動的极景,但這個方法期望在活動銷毀的時候能夠返回一個結(jié)果給上一個活動

? ?2.B放回時,調(diào)用了setResult()方法驾茴。這個方法非常重要盼樟,是專門用于向上一個活動返回數(shù)據(jù)的。setResult()方法接收兩個參數(shù)锈至,第一個參數(shù)用于向上一個活動返回處理結(jié)果晨缴,一般只使用RESULT_OK或RESULT_CANCELED這兩個值,第二個參數(shù)則把帶有數(shù)據(jù)的Intent傳遞回去裹赴。

? 3.在SecondActivity被銷毀之后會回調(diào)上一個活動的onActivityResult()方法喜庞,因此我們需要在A中重寫這個方法來得到返回的數(shù)據(jù)

?4.用戶在B中并不是通過點擊按鈕诀浪,而是通過按下Back鍵回到FirstActivity,這樣數(shù)據(jù)不就沒法返回了嗎延都?沒錯雷猪,不過這種情況還是很好處理的,我們可以通過在SecondActivity中重寫onBackPressed()方法來解決這個問題

14.其實Android是使用任務(wù)(Task)來管理活動的晰房,一個任務(wù)就是一組存放在棧里的活動的集合求摇,這個棧也被稱作返回棧(Back Stack)。棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)殊者,在默認(rèn)情況下与境,每當(dāng)我們啟動了一個新的活動,它會在返回棧中入棧猖吴,并處于棧頂?shù)奈恢盟さ蟆6慨?dāng)我們按下Back鍵或調(diào)用finish()方法去銷毀一個活動時,處于棧頂?shù)幕顒訒鰲:1危@時前一個入棧的活動就會重新處于棧頂?shù)奈恢霉睬O到y(tǒng)總是會顯示處于棧頂?shù)幕顒咏o用戶


15.活動狀態(tài)

每個活動在其生命周期中最多可能會有4種狀態(tài)。

1.運行狀態(tài)

當(dāng)一個活動位于返回棧的棧頂時党窜,這時活動就處于運行狀態(tài)拗引。系統(tǒng)最不愿意回收的就是處于運行狀態(tài)的活動,因為這會帶來非常差的用戶體驗幌衣。

2.暫停狀態(tài)

當(dāng)一個活動不再處于棧頂位置矾削,但仍然可見時,這時活動就進(jìn)入了暫停狀態(tài)豁护。你可能會覺得既然活動已經(jīng)不在棧頂了哼凯,還怎么會可見呢?這是因為并不是每一個活動都會占滿整個屏幕的择镇,比如對話框形式的活動只會占用屏幕中間的部分區(qū)域挡逼,你很快就會在后面看到這種活動。處于暫停狀態(tài)的活動仍然是完全存活著的腻豌,系統(tǒng)也不愿意去回收這種活動(因為它還是可見的,回收可見的東西都會在用戶體驗方面有不好的影響)嘱能,只有在內(nèi)存極低統(tǒng)才會去考慮回收這種活動吝梅。

3.停止?fàn)顟B(tài)

當(dāng)一個活動不再處于棧頂位置,并且完全不可見的時候惹骂,就進(jìn)入了停止?fàn)顟B(tài)苏携。系統(tǒng)仍然會為這種活動保存相應(yīng)的狀態(tài)和成員變量,但是這并不是完全可靠的对粪,當(dāng)其他地方需要內(nèi)存時右冻,處于停止?fàn)顟B(tài)的活動有可能會被系統(tǒng)回收装蓬。

4.銷毀狀態(tài)

當(dāng)一個活動從返回棧中移除后就變成了銷毀狀態(tài)。系統(tǒng)會最傾向于回收處于這種狀態(tài)的活動纱扭,從而保證手機(jī)的內(nèi)存充足牍帚。

5. 活動的生存期

Activity類中定義了7個回調(diào)方法,覆蓋了活動生命周期的每一個環(huán)節(jié)乳蛾,下面就來一一介紹這7個方法暗赶。

??onCreate()。這個方法你已經(jīng)看到過很多次了肃叶,每個活動中我們都重寫了這個方法蹂随,它會在活動第一次被創(chuàng)建的時候調(diào)用。你應(yīng)該在這個方法中完成活動的初始化操作因惭,比如說加載布局岳锁、綁定事件等。

?onStart()蹦魔。這個方法在活動由不可見變?yōu)榭梢姷臅r候調(diào)用浸锨。

?onResume()。這個方法在活動準(zhǔn)備好和用戶進(jìn)行交互的時候調(diào)用版姑。此時的活動一定位于返回棧的棧頂柱搜,并且處于運行狀態(tài)。

?onPause()剥险。這個方法在系統(tǒng)準(zhǔn)備去啟動或者恢復(fù)另一個活動的時候調(diào)用聪蘸。我們通常會在這個方法中將一些消耗CPU的資源釋放掉,以及保存一些關(guān)鍵數(shù)據(jù)表制,但這個方法的執(zhí)行速度一定要快健爬,不然會影響到新的棧頂活動的使用。

?onStop()么介。這個方法在活動完全不可見的時候調(diào)用娜遵。它和onPause()方法的主要區(qū)別在于,如果啟動的新活動是一個對話框式的活動壤短,那么onPause()方法會得到執(zhí)行设拟,而onStop()方法并不會執(zhí)行。

?onDestroy()久脯。這個方法在活動被銷毀之前調(diào)用纳胧,之后活動的狀態(tài)將變?yōu)殇N毀狀態(tài)。

?onRestart()帘撰。這個方法在活動由停止?fàn)顟B(tài)變?yōu)檫\行狀態(tài)之前調(diào)用跑慕,也就是活動被重新啟動了。

以上7個方法中除了onRestart()方法,其他都是兩兩相對的核行,從而又可以將活動分為3種生存期牢硅。




16.onSaveInstanceState()回調(diào)方法,這個方法可以保證在活動被回收之前一定會被調(diào)用芝雪,因此我們可以通過這個方法來解決活動被回收時臨時數(shù)據(jù)得不到保存的問題减余。

? ? 當(dāng)一個活動進(jìn)入到了停止?fàn)顟B(tài),是有可能被系統(tǒng)回收的绵脯。那么想象以下場景:應(yīng)用中有一個活動A佳励,用戶在活動A的基礎(chǔ)上啟動了活動B,活動A就進(jìn)入了停止?fàn)顟B(tài)蛆挫,這個時候由于系統(tǒng)內(nèi)存不足赃承,將活動A回收掉了,然后用戶按下Back鍵返回活動A悴侵,會出現(xiàn)什么情況呢瞧剖?其實還是會正常顯示活動A的,只不過這時并不會執(zhí)行onRestart()方法可免,而是會執(zhí)行活動A的onCreate()方法抓于,因為活動A在這種情況下會被重新創(chuàng)建一次。這樣看上去好像一切正常浇借,可是別忽略了一個重要問題捉撮,活動A中是可能存在臨時數(shù)據(jù)和狀態(tài)的。

注意

1妇垢、如果是用戶自動按下返回鍵巾遭,或程序調(diào)用finish()退出程序,是不會觸發(fā)onSaveInstanceState()和onRestoreInstanceState()的闯估。

2灼舍、每次用戶旋轉(zhuǎn)屏幕時,您的Activity將被破壞并重新創(chuàng)建涨薪。當(dāng)屏幕改變方向時骑素,系統(tǒng)會破壞并重新創(chuàng)建前臺Activity,因為屏幕配置已更改刚夺,您的Activity可能需要加載替代資源(例如布局)献丑。即會執(zhí)行onSaveInstanceState()和onRestoreInstanceState()的。

17.我們在使用Intent傳遞數(shù)據(jù)時也是用的類似的方法光督。這里跟你提醒一點阳距,Intent還可以結(jié)合Bundle一起用于傳遞數(shù)據(jù),首先可以把需要傳遞的數(shù)據(jù)都保存在Bundle對象中结借,然后再將Bundle對象存放在Intent里。到了目標(biāo)活動之后先從Intent中取出Bundle卒茬,再從Bundle中一一取出數(shù)據(jù)

18.活動的啟動模式;

在實際項目中我們應(yīng)該根據(jù)特定的需求為每個活動指定恰當(dāng)?shù)膯幽J酱稀幽J揭还灿?種咖熟,分別是standard、singleTop柳畔、singleTask和singleInstance馍管,可以在AndroidManifest.xml中通過給<activity>標(biāo)簽指定android:launchMode屬性來選擇啟動模式

? ? 1.standard是活動默認(rèn)的啟動模式,在不進(jìn)行顯式指定的情況下薪韩,所有活動都會自動使用這種啟動模式确沸,對于使用standard模式的活動,系統(tǒng)不會在乎這個活動是否已經(jīng)在返回棧中存在俘陷,每次啟動都會創(chuàng)建該活動的一個新的實例罗捎。

? ? 2.singleTop模式。當(dāng)活動的啟動模式指定為singleTop拉盾,在啟動活動時如果發(fā)現(xiàn)返回棧的棧頂已經(jīng)是該活動桨菜,則認(rèn)為可以直接使用它,不會再創(chuàng)建新的活動實例捉偏。不過當(dāng)Activity并未處于棧頂位置時倒得,這時再啟動Activity,還是會創(chuàng)建新的實例的

? ? 3.singleTask夭禽,每次啟動該活動時系統(tǒng)首先會在返回棧中檢查是否存在該活動的實例霞掺,如果發(fā)現(xiàn)已經(jīng)存在則直接使用該實例,并把在這個活動之上的所有活動統(tǒng)統(tǒng)出棧讹躯,如果沒有發(fā)現(xiàn)就會創(chuàng)建一個新的活動實例

? ? 4.singleInstance模式的活動會啟用一個新的返回棧來管理這個活動(其實如果singleTask模式指定了不同的taskAffinity菩彬,也會啟動一個新的返回棧。

????那么這樣做有什么意義呢蜀撑?想象以下場景挤巡,假設(shè)我們的程序中有一個活動是允許其他程序調(diào)用的,如果我們想實現(xiàn)其他程序和我們的程序可以共享這個活動的實例酷麦,應(yīng)該如何實現(xiàn)呢矿卑?使用前面3種啟動模式肯定是做不到的,因為每個應(yīng)用程序都會有自己的返回棧沃饶,同一個活動在不同的返回棧中入棧時必然是創(chuàng)建了新的實例母廷。而使用singleInstance模式就可以解決這個問題,在這種模式下會有一個單獨的返回棧來管理這個活動糊肤,不管是哪個應(yīng)用程序來訪問這個活動琴昆,都共用的同一個返回棧,也就解決了共享活動實例的問題

? ? 使用getTaskId()可以獲取到Activity所在的task的id馆揉。

19.getClass().getSimpleName()獲取當(dāng)前Activity的類名业舍,知曉當(dāng)前是在哪一個活動。

20.退出程序,android.os.Process.killProcess(android.os.Process.myPid());

21.啟動活動的最佳寫法

? ? 我們在Activity中添加了一個actionStart()方法舷暮,在這個方法中完成了Intent的構(gòu)建态罪,另外所有Activity中需要的數(shù)據(jù)都是通過actionStart()方法的參數(shù)傳遞過來的,然后把它們存儲到Intent中下面,最后調(diào)用startActivity()方法啟動Activity复颈。例如下面:

? ??public class SecondActivity extends BaseActivity {

? ? public static void actionStart(Context context, String data1, String data2) {

? ? ? ? Intent intent = new Intent(context, SecondActivity.class);

? ? ? ? intent.putExtra("param1", data1);

? ? ? ? intent.putExtra("param2", data2);

? ? ? ? context.startActivity(intent);

? ? }

}

????這樣寫的好處在哪里呢?最重要的一點就是一目了然沥割,SecondActivity所需要的數(shù)據(jù)在方法參數(shù)中全部體現(xiàn)出來了耗啦,這樣即使不用閱讀SecondActivity中的代碼,不去詢問負(fù)責(zé)編寫SecondActivity的同事机杜,你也可以非常清晰地知道啟動SecondActivity需要傳遞哪些數(shù)據(jù)帜讲。另外,這樣寫還簡化了啟動活動的代碼叉庐,現(xiàn)在只需要一行代碼就可以啟動SecondActivity

22.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舒帮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子陡叠,更是在濱河造成了極大的恐慌玩郊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枉阵,死亡現(xiàn)場離奇詭異译红,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兴溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門侦厚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拙徽,你說我怎么就攤上這事刨沦。” “怎么了膘怕?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵想诅,是天一觀的道長。 經(jīng)常有香客問我岛心,道長来破,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任忘古,我火速辦了婚禮徘禁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘髓堪。我一直安慰自己送朱,他們只是感情好娘荡,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骤菠,像睡著了一般它改。 火紅的嫁衣襯著肌膚如雪疤孕。 梳的紋絲不亂的頭發(fā)上商乎,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音祭阀,去河邊找鬼鹉戚。 笑死,一個胖子當(dāng)著我的面吹牛专控,可吹牛的內(nèi)容都是我干的抹凳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伦腐,長吁一口氣:“原來是場噩夢啊……” “哼赢底!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柏蘑,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幸冻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咳焚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洽损,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年革半,在試婚紗的時候發(fā)現(xiàn)自己被綠了碑定。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡又官,死狀恐怖延刘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情六敬,我是刑警寧澤碘赖,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站觉阅,受9級特大地震影響崖疤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜典勇,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一劫哼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧割笙,春花似錦权烧、人聲如沸眯亦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妻率。三九已至,卻和暖如春板祝,著一層夾襖步出監(jiān)牢的瞬間宫静,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工券时, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留孤里,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓橘洞,卻偏偏與公主長得像捌袜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炸枣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容