android项目学习心得(全源导航)
1、acitivity的跳轉(zhuǎn),返回上一個(gè)界面是結(jié)束當(dāng)前界面,而不是從當(dāng)前界面去跳轉(zhuǎn)前一個(gè)界面(即將前一個(gè)界面創(chuàng)建了一遍),概念要理清,具體寫法由隱式和顯式多種寫法。像這種操作UI界面,可以多使用fragment,就像看新聞點(diǎn)擊一層層推送新聞,每次退回都是返回前一個(gè)瀏覽的新聞。
2、寫Android代碼的時(shí)候,也要注意java中空指針問題,空指針就是在棧中聲明了一個(gè)對(duì)象,但是并沒有在堆中實(shí)例化,要先if-else判斷下傳參操作的對(duì)象是否為null。
在一些轉(zhuǎn)換(強(qiáng)制)類型的代碼里,最好也要用try-catch進(jìn)行異常判斷(比如接口和類相互轉(zhuǎn)化),如果轉(zhuǎn)換失敗最好再拋出異常,便于檢查代碼。
?
在acticity里直接對(duì)activity內(nèi)容進(jìn)行操作,最好不要定義activity,而是使用官方getActivity()更加安全。
?3、對(duì)于activity的生命周期的理解,這一塊比較重要,在寫控件注冊(cè)和取消注冊(cè)的時(shí)候,要確定activity激活和銷毀的時(shí)候,哪個(gè)函數(shù)在棧頂,用CSDN模板不一定次次都行的通。這個(gè)和activity的啟動(dòng)方式有關(guān),除了singleInstance(類似支付寶頁面,不能再創(chuàng)建新的支付界面,只能用棧中唯一的那個(gè)支付界面),其他三種用的最多,當(dāng)然根據(jù)情況如果沒必要使用太多內(nèi)存,還是用標(biāo)準(zhǔn)的啟動(dòng)方法比較好。
4、app運(yùn)行閃退,看Manifest里面有沒有注冊(cè)活動(dòng),自定義activity有時(shí)候會(huì)沒有自動(dòng)注冊(cè);也可以將Manifest里面啟動(dòng)intent賦給出問題的activity,如果沒有閃退,考慮前一個(gè)activity的layout有沒有注冊(cè)準(zhǔn)確或者跳轉(zhuǎn)語句有沒有寫錯(cuò)跳轉(zhuǎn)對(duì)象的類,如果閃退了則是該activity出現(xiàn)問題,先檢查layout,然后看看是不是有空指針異常,從而進(jìn)行異常判斷操作。還有一種情況就是權(quán)限有沒有給全,在開發(fā)定位,網(wǎng)絡(luò)資源的時(shí)候,要打開網(wǎng)絡(luò)權(quán)限以及其他廠家SDK里的相關(guān)權(quán)限。
5、再學(xué)習(xí)了接口之后,發(fā)現(xiàn)Android上按鈕等控件的點(diǎn)擊觸發(fā)事件,實(shí)際上是創(chuàng)建接口的匿名實(shí)現(xiàn)類的匿名對(duì)象,這樣做方便。
Android里:
?
捕獲的時(shí)候,若方法形參里面含有回調(diào)函數(shù),建議使用匿名類對(duì)象。
6、?當(dāng)ros系統(tǒng)執(zhí)行命令roscore無法啟動(dòng),并且發(fā)現(xiàn)報(bào)錯(cuò)是無法連接本地服務(wù)器,這時(shí)候要去修改bashrc文件里的ROS_HOSTNAME ?和 ROS_MASTER_URI一致即可。(?hostname是主機(jī)名,用于在系統(tǒng)上標(biāo)識(shí)一臺(tái)機(jī)器; IP地址(聯(lián)網(wǎng)后分配的URI)是在TCP/IP網(wǎng)絡(luò)中唯一標(biāo)志一臺(tái)機(jī)器)。
7、使用try-catch-finally處理編譯時(shí)異常,是得程序在編譯時(shí)就不在報(bào)錯(cuò),但運(yùn)行時(shí)仍可能報(bào)錯(cuò),相當(dāng)于我們使用try-catch-finally將一個(gè)編譯時(shí)可能出現(xiàn)的異常,延遲到運(yùn)行時(shí)出現(xiàn)。
8、Android里的服務(wù)service和普通activity的一個(gè)顯著區(qū)別是當(dāng)跳轉(zhuǎn)到service界面時(shí),即使退出也可以繼續(xù)運(yùn)行服務(wù)里的程序,類似嗶哩嗶哩后臺(tái)視頻播放功能。而bindservice是隨著activity的關(guān)閉而關(guān)閉。應(yīng)用程序是一個(gè)默認(rèn)的單線程單任務(wù)的程序,不能去阻塞UI線程,不能在UI線程外訪問UI組件。同步線程處理類似于打開一個(gè)網(wǎng)站要有進(jìn)度條顯示,而異步就是微博中點(diǎn)擊收藏,只需要告訴用戶是否收藏成功,不需要特地等待。在開發(fā)過程中可以將顯示的進(jìn)程放進(jìn)UI進(jìn)程,而那些費(fèi)時(shí)的進(jìn)程則可以放進(jìn)自己定義的進(jìn)程。
9、線程里的sleep函數(shù)可以強(qiáng)制線程阻塞,這讓我想起了本科同學(xué)玩王者榮耀,同學(xué)a用的是oppor9,同學(xué)b用的是華為,a喜歡用刺客類型的英雄,在地圖漫游的時(shí)候游戲不卡,一旦組團(tuán)開大就會(huì)變卡,硬件系統(tǒng)著實(shí)會(huì)對(duì)軟件發(fā)揮性能造成影響,但在時(shí)期不長的更新的情況下,也不排除工作人員對(duì)英雄的大招進(jìn)程周期故意加了sleep函數(shù),然后和游戲方有利益關(guān)系的手機(jī)廠商借此推出新機(jī)型,讓游戲識(shí)別新機(jī)型調(diào)出沒有sleep的進(jìn)程,造成手機(jī)性能好的假象。
10、異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。
當(dāng)JAVA程序違反了JAVA的語義規(guī)則時(shí),JAVA虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。
違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置的語義檢查。例如數(shù)組下標(biāo)越界,會(huì)引發(fā)IndexOutOfBoundsException;訪問null的對(duì)象時(shí)會(huì)引發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。
11、首先明確導(dǎo)航的基本概念:檢測(cè)和控制載體從一個(gè)地方移動(dòng)到另一個(gè)地方的過程。常用的坐標(biāo)系有日心坐標(biāo)系、地球坐標(biāo)系、地理坐標(biāo)系等。對(duì)于地球,地心坐標(biāo)系和地球坐標(biāo)系是相似的,他們的區(qū)別在于地心慣性坐標(biāo)系的原點(diǎn)不轉(zhuǎn)動(dòng),而地球坐標(biāo)系與地球固連,隨地球一起轉(zhuǎn)動(dòng)。對(duì)于載體,載體的航向角、橫滾角、俯仰角是很重要的參數(shù),機(jī)體坐標(biāo)系一般采用地理坐標(biāo)系,即原點(diǎn)在載體重心,x軸水平向東、y軸與當(dāng)?shù)刈游缇€一致、z軸指天向上,這就是東北天坐標(biāo)系。
基本的坐標(biāo)變換按照z-x-y軸旋轉(zhuǎn),變換矩陣按哪個(gè)軸旋轉(zhuǎn),哪個(gè)軸為1,例如姿態(tài)變換矩陣,還有位置變換矩陣,在求解位置矩陣的時(shí)候可以將矩陣中的角度計(jì)算公式簡化為9個(gè)變量,再用三角函數(shù)求解,并且由速度矩陣進(jìn)行微分可以求得速率矩陣,前提是進(jìn)行初始對(duì)準(zhǔn),即當(dāng)?shù)匚恢靡阎?/p>
地球是一個(gè)梨狀的橢球,有四個(gè)比較重要的線,l1:地心垂線、l2:引力垂線、l3:地理垂線、l4:重力垂線。
?12、Java通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類或其它子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過5個(gè)關(guān)鍵詞來實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出(throws)一個(gè)異常,這時(shí)候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理。
用try來指定一塊預(yù)防所有"異常"的程序。緊跟在try程序后面,應(yīng)包含一個(gè)catch子句來指定你想要捕捉的"異常"的類型。
throw語句用來明確地拋出一個(gè)"異常"。
throws用來標(biāo)明一個(gè)成員函數(shù)可能拋出的各種"異常"。
Finally為確保一段代碼不管發(fā)生什么"異常"都被執(zhí)行一段代碼。
可以在一個(gè)成員函數(shù)調(diào)用的外面寫一個(gè)try語句,在這個(gè)成員函數(shù)內(nèi)部寫另一個(gè)try語句保護(hù)其他代碼。每當(dāng)遇到一個(gè)try語句,"異常"的框架就放到堆棧上面,直到所有的try語句都完成。如果下一級(jí)的try語句沒有對(duì)某種"異常"進(jìn)行處理,堆棧就會(huì)展開,直到遇到有處理這種"異常"的try語句。
13、error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況
????exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況
14、加速度計(jì)測(cè)得其實(shí)是比力,在地心慣性坐標(biāo)系中,加速度等于引力矢量與比力之和,比力,通俗講就是載體相對(duì)慣性空間的絕對(duì)加速度和引力加速度之差,這個(gè)量對(duì)于姿態(tài)矩陣計(jì)算很重要,體現(xiàn)在,由比力(機(jī)體)推出比力(導(dǎo)航)推出速度推出角速度推出姿態(tài)微分矩陣最后得出姿態(tài)矩陣,由此得到橫滾、俯仰、偏轉(zhuǎn)角,同理還可以得出導(dǎo)航位置信息。
15、捷聯(lián)慣導(dǎo)相比傳統(tǒng)的平臺(tái)慣導(dǎo),用數(shù)學(xué)計(jì)算平臺(tái)代替了物理平臺(tái),便于維護(hù)體積小重量輕成本低,便于采用余度技術(shù),提高可靠性。根據(jù)組合結(jié)構(gòu)、信息交換以及組合的程度不同,SINS和GPS組合可以分為松組合、緊組合、超緊組合和深組合四種組合模式:松組合是一種低水平的組合模式,在該系統(tǒng)中GPS和SINS單獨(dú)工作,通過專用接口將兩者的量測(cè)數(shù)據(jù)輸入組合濾波器,利用GPS信息通過濾波器估計(jì)并校正SINS誤差,使其保持較高的導(dǎo)航精度;緊組合根據(jù)SINS信息和衛(wèi)星星歷計(jì)算接收機(jī)相對(duì)于衛(wèi)星視線方向的距離和距離變化率與GPS碼環(huán)和載波環(huán)得到的偽距偽距率相減作為卡爾曼濾波器的量測(cè)信息,然后利用濾波器估計(jì)SINS誤差率和接收機(jī)鐘差等對(duì)SINS進(jìn)行校正;超緊組合還利用SINS輸出的速率信息來輔助GPS的跟蹤環(huán)路;深組合是以矢量跟蹤為基礎(chǔ)采用SINS與GPS接收機(jī)信號(hào)相關(guān)器的輸出進(jìn)行數(shù)據(jù)融合。
16、對(duì)于代碼的優(yōu)化,除以2可以用>>1代替;>>>無符號(hào)右移,在androidstudio里面運(yùn)行測(cè)試類,出了java類放的位置要正確,測(cè)試函數(shù)前也要加上注解@Test,這樣才能運(yùn)行成功,并且結(jié)果在logcat里查詢.
17、Android通信機(jī)制:message是數(shù)據(jù)載體;handler功能是發(fā)送消息、處理消息、移除消息;CONTEXT是提供了關(guān)于應(yīng)用環(huán)境全局信息的抽象類,通過他的對(duì)象才可以操作系統(tǒng)或應(yīng)用的相關(guān)資源;
18、鴻蒙開發(fā)IDE ?DevEcoStudio打開工程的目錄千萬不能包含中文。安卓內(nèi)部存儲(chǔ)需要root權(quán)限,建議把文件保存到sd卡上。
總結(jié)
以上是生活随笔為你收集整理的android项目学习心得(全源导航)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019八泉峡第二届国际露营大会圆满落幕
- 下一篇: 桃花下的爱恋,痴情