多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > 適用于iOS開(kāi)發(fā)者的Android開(kāi)發(fā)技巧

適用于iOS開(kāi)發(fā)者的Android開(kāi)發(fā)技巧

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-12-20 09:01:20 閱讀次數(shù):2522次

     我曾從事過(guò)5年的iOS利用開(kāi)發(fā)工作,那段時(shí)間我1直在盡可能避免同Android打交道――不過(guò)現(xiàn)在情況不同了。不管大家是不是相信,Android開(kāi)發(fā)其實(shí)樂(lè)趣滿滿、而且與iOS開(kāi)發(fā)相比也不像大家想象的那樣差異巨大。

     我在Android平臺(tái)上開(kāi)發(fā)出這款“7分鐘鍛煉”利用,并借此學(xué)到了很多寶貴的知識(shí)。我希望這篇文章分享的1些小技能也能幫助大家解決實(shí)際問(wèn)題。請(qǐng)注意,我接下來(lái)進(jìn)行比較的內(nèi)容其實(shí)不1定完全匹配,而且本文的重點(diǎn)也不在于完全地?cái)⑹鯝ndroid開(kāi)發(fā);固然,我1定會(huì)提到自己在開(kāi)發(fā)這款簡(jiǎn)單利用的進(jìn)程中所積累到的全部經(jīng)驗(yàn)。

 

      IDE

      我選擇使用Android Studio,而且我愿意打賭:只要測(cè)試完成,它將成為未來(lái)的業(yè)界標(biāo)準(zhǔn)。雖然很多報(bào)導(dǎo)稱它的運(yùn)行狀態(tài)其實(shí)不穩(wěn)定,但在我的實(shí)際使用中、它僅僅崩潰過(guò)1次?;蛟S我只是習(xí)慣了Xcode。

      Java

      不管大家對(duì)Java如何評(píng)價(jià),說(shuō)到底它也只是不過(guò)是1種編程語(yǔ)言而已。它能夠解決問(wèn)題,而且對(duì)經(jīng)驗(yàn)豐富的開(kāi)發(fā)者來(lái)講、大家肯定是把主要精力放在框架而非Java身上。很高興我用不著跟J2EE扯上關(guān)系。

      iOS加密

      移動(dòng)利用安全保護(hù)平臺(tái)――愛(ài)加密,在Android利用加密保護(hù)方面有dex加殼、獨(dú)有的so庫(kù)加密保護(hù)、資源文件保護(hù)等。而且推出了iOS利用加密保護(hù),實(shí)屬全球首創(chuàng)。分別從本地?cái)?shù)據(jù)、方法體/方法名、URL編碼、程序結(jié)構(gòu)、網(wǎng)絡(luò)傳輸數(shù)據(jù)等幾個(gè)方面對(duì)iOS利用進(jìn)行全方位的保護(hù),并可以根據(jù)iOS利用用戶的需求提供定制解決方案,從而實(shí)現(xiàn)iOS防破解保護(hù)。下圖是iOS利用使用前后

      摹擬器

      我1直認(rèn)為iOS摹擬器讓人頭痛不已,但相比之下我才發(fā)現(xiàn)當(dāng)初的自己還是太年輕。在稍作嘗試以后,我決定放棄Android摹擬器、直接將利用部署在實(shí)際裝備上――除非大家愿意拿出大量時(shí)間盯著屏幕枯等。

      Storyboard / NIB

      我在自己的iOS開(kāi)發(fā)博客上談了很多關(guān)于Storyboard的話題,很多與我意見(jiàn)相左的讀者發(fā)來(lái)的1些措辭強(qiáng)硬的郵件讓我完全放棄了這1交換平臺(tái)。

      Android使用的布局格式為xml。它們彼此之間完全獨(dú)立。Android Studio還提供1套出色的“所見(jiàn)即所得”編輯器:

 

       但大家依然可以深入到原始xml當(dāng)中――如果愿意的話(反正我1般是不愿意這么麻煩)。

 

     相對(duì)自動(dòng)布局,大家也能夠選擇其它布局容器,例如RelativeLayout和FrameLayout之類。在這里,我們能夠以像素?cái)?shù)量(即裝備的像素容納能力)或matchparent、wrapcontant等來(lái)設(shè)定理想的寬度、高度、填充效果、邊框和色調(diào)。

     Wrap非常合適文本內(nèi)容,它會(huì)自動(dòng)將調(diào)劑正確的高度并設(shè)定與之相適應(yīng)的尺寸,并把其余工作交給LinearLayout等特定布局方案。

     雖然我還沒(méi)有用過(guò),但Fragment看起來(lái)一樣是1種對(duì)自定義UI元素加以重新利用的好途徑。

     UIViewController

     Android利用1個(gè)Activity來(lái)實(shí)現(xiàn)UIViewConroller的功能。每個(gè)屏幕/窗口都相當(dāng)于1個(gè)Activity。我們就在這里處理大部份工作,包括將數(shù)據(jù)綁定到UI當(dāng)中或處理事件等等。

     Controller/View轉(zhuǎn)換

     在iOS當(dāng)中我們利用segue、pushViewController、presentController等在不同屏幕之間進(jìn)行遷移。但在Android環(huán)境下,我們需要使用Intent。

     大家可以輕松遷移至新的activity當(dāng)中,乃至能夠?qū)?部份數(shù)據(jù)傳遞過(guò)去。

public void onItemClick(...) { Intent i = new Intent(getBaseContext(), MyActivity.class); i.putExtra("row", position); startActivity(i); }


     在新的Activity(也就是以上代碼中的MyActivity)中,我們可以提取出傳遞來(lái)的數(shù)據(jù):

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_mine); Bundle extras = getIntent().getExtras(); if (extras != null) { int row = extras.getInt("row"); .... } ... }


     大家也能夠利用Intent來(lái)觸發(fā)各類事件,例照實(shí)現(xiàn)表格同享:

Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent.EXTRA_TEXT, "Share This"); sendIntent.setType("text/plain"); startActivity(sendIntent);

     IBOutlet

     或許大家跟我1樣,在超過(guò)半數(shù)的情況下會(huì)忘記連接IBOutlet。

     在Android當(dāng)中,每個(gè)場(chǎng)景/組件都具有獨(dú)立的ID,內(nèi)容以下所示:

@+id/myButton

      它隨后會(huì)自動(dòng)生成1個(gè)名為R的類,接下來(lái)我們可以以下所示訪問(wèn)代碼中的按鈕:

Button button = (Button)findViewById(R.id.myButton);

      標(biāo)簽

      iOS開(kāi)發(fā)者們常常使用的1項(xiàng)技能就是利用處景標(biāo)簽來(lái)保存查找信息,例如整體布局的位移。在Android環(huán)境下,大家也能夠?qū)⑷繉?duì)象加入到標(biāo)簽當(dāng)中,這類作法非常實(shí)用。

row.setTag(data);


     UITableViewController / UITableViewDataSource / UITableViewCell

     Android當(dāng)中的ListView就相當(dāng)于iOS上的UITableView。

     而UITableViewDataSource在Android中所對(duì)應(yīng)的則是ArrayAdapter:

MyAdapter adapter = new MyAdapter(this, R.layout.listview_item_row); listView.setAdapter(adapter);


     其中l(wèi)istviewitemrow屬于某1行的布局,相當(dāng)于iOS中的UITableViewCell。

     其中的adapter隨后會(huì)在getView當(dāng)中創(chuàng)建/重新使用各行。

     大家也能夠像這樣設(shè)置標(biāo)題:

View header = getLayoutInflater().inflate(R.layout.listview_header_row, null); listView.addHeaderView(header);


      圖片/資源

      由于有了Asset Catalogue的輔助,iOS環(huán)境下的圖片處理變得非常輕松,通常情況下開(kāi)發(fā)者只需斟酌視網(wǎng)膜屏與非視網(wǎng)膜屏這兩種情況(除非大家想要在iPhone上使用專門(mén)針對(duì)iPad的圖片)。

      由于Android陣營(yíng)下各款裝備的分辨率千差萬(wàn)別,因此大家必須要提供以下4種圖片格式。

 

      它們分別是:mdpi(普通分辨率)、hdpi(高分辨率)、xhdpi(超高分辨率)和xxhdpi(超超高分辨率)。我個(gè)人認(rèn)為xxxhdpi版本的誕生將只是時(shí)間問(wèn)題。

      在利用Android Studio創(chuàng)建項(xiàng)目時(shí),大家只需要提供1份圖標(biāo)、它就可以自動(dòng)創(chuàng)建出這4種格式。這類作法相信已給從事過(guò)Android利用開(kāi)發(fā)的朋友們留下了嚴(yán)重的心理陰影:別怕,大家可以隨后手動(dòng)將其替換為完善的像素版本。

      因此,最基本的解決思路就是為每幅圖片針對(duì)每種像素密度創(chuàng)建1個(gè)單獨(dú)的版本,為其設(shè)定一樣的名稱并放在正確的文件夾之下;這樣Android就會(huì)視裝備平臺(tái)的具體情況挑選理想的版本。

     自定義字體

     自定義字體在Android上實(shí)現(xiàn)起來(lái)一樣非常簡(jiǎn)單:將字體復(fù)制到main/assets當(dāng)中,而后就可以利用以下代碼加以調(diào)用:

Typeface font = Typeface.createFromAsset(getAssets(), "Lato-Regular.ttf"); textView.setTypeface(font);


     問(wèn)題在于這類方式其實(shí)不是在所有裝備上都行得通,因此大家需要準(zhǔn)備1套后備字體――不過(guò)我自己手頭的兩臺(tái)Android裝備都沒(méi)有提供這樣的字體。

      NSLog

     日志看起來(lái)沒(méi)甚么可講的,大家可以利用它來(lái)進(jìn)行利用程序調(diào)試甚么甚么的(此處省去1千字)。System.out.println(..)似乎也一樣能夠完成這項(xiàng)任務(wù)。

      向下兼容能力

     我們都聽(tīng)說(shuō)過(guò)Android裝備的碎片化問(wèn)題。不過(guò)從本質(zhì)上講,處理舊版本Android的難度其實(shí)不比在舊版本iOS上使用新型iOS功能更高。不過(guò)大家可能需要對(duì)這類兼容能力加以高度重視,畢竟Android環(huán)境下這類問(wèn)題的出現(xiàn)頻率要遠(yuǎn)高于iOS。

      我們可以通過(guò)以下代碼來(lái)檢查當(dāng)前Android版本:

if (Build.VERSION.SDK_INT >= 11.0) { ... }


      以下代碼則用于避免函數(shù)調(diào)用引發(fā)的正告信息:

@SuppressLint({"NewApi", "LocalSuppress"}) private void myFunction() { ... }


      千奇百怪的漫長(zhǎng)Android之旅

      CountDownTimer

      CountDownTimer――這項(xiàng)內(nèi)置功能的存在實(shí)在讓我興奮不已,由于這正是我的7分鐘鍛煉利用所必須的要素。但是經(jīng)過(guò)實(shí)際測(cè)試,它不會(huì)在onFinish之前發(fā)送最后1次onTick,這是個(gè)非常詭異的bug而且到現(xiàn)在也沒(méi)能得到修復(fù)。詭異,真是太詭異了。

      方位

      當(dāng)用戶轉(zhuǎn)動(dòng)手中的裝備時(shí),我們的activity也會(huì)完全重置,這意味著大家必須在activity重新載入以后為其保存全部狀態(tài)與恢復(fù)機(jī)制。Android環(huán)境下的處理方式使人頭痛,但iOS則處理得很好。

     Kindle Fire / Amazon Store

     要讓自己的利用程序順利入駐Amazon Store,我只需要對(duì)現(xiàn)有成果作出兩項(xiàng)調(diào)劑:

     ?YouTube SDK沒(méi)法起效,由于Kindle Fire上不提供YouTube利用。不過(guò)對(duì)Flash的支持能力仍然被保存下來(lái)。

     ?大家需要針對(duì)Amazon Store替換利用購(gòu)買(mǎi)代碼。

     大家可以利用android.os.Build.MANUFACTURER和android.os.Build.MODEL對(duì)裝備的制造商和產(chǎn)品型號(hào)信息進(jìn)行檢測(cè)。

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 羞羞视频免费观看网站 | 日本www网站 | 亚洲欧洲精品国产二码 | 在线成h人视频网站免费观看 | 欧美日韩激情一区二区三区 | 性欧美videos另类hd高清 | freexxxhd性欧美 | 国产精品爱久久久久久久 | 最新在线观看精品国产福利片 | 日本免费一区二区三区视频 | 全网免费在线播放视频入口 | 欧美日韩国产超高清免费看片 | 欧美另类xxxx | 在线天堂中文 | 美国一级毛片免费看 | 日本护士xxxx0000| 国产性一交一乱一伦一色一情 | 在线免费视频a | 亚洲不卡免费视频 | 叼嘿视频在线观看 | 久久在精品线影院精品国产 | 欧美x性| 欧美 日韩 视频 | 这里是九九伊人 | 成人久久精品一区二区三区 | 极品久久| 黄色aa| 国产欧美精品区一区二区三区 | 色婷婷影院在线视频免费播放 | 精品成人一区二区三区免费视频 | 国内精品久久久久影 | 亚洲一级成人 | 精品午夜国产在线观看不卡 | 亚洲精品久久久久影院 | 大香人蕉免费视频75 | 亚洲欧美激情精品一区二区 | 网友偷自拍原创区 | 欧美八区 | 超91在线 | 免费观看中文字幕 | 欧美成人一区二区三区在线视频 |