成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

2017 Android 面試題 [ 基礎(chǔ)與細(xì)節(jié) ]

sydMobile / 1028人閱讀

摘要:操作完成后,服務(wù)會(huì)自行停止運(yùn)行。創(chuàng)建工作隊(duì)列,用于將逐一傳遞給實(shí)現(xiàn),這樣您就永遠(yuǎn)不必?fù)?dān)心多線程問題。是的消息機(jī)制,集中解決線程間通信問題。

2017 Android 面試題 [ 基礎(chǔ)與細(xì)節(jié) ]

感謝@chuyao拋出的這些問題,平時(shí)業(yè)務(wù)代碼寫多了,很多基礎(chǔ)的東西變得含糊不清了,這次裸辭出來找工作確實(shí)沒有之前順利,順便求上海Android開發(fā)的坑。
我自己整理了些答案,不對(duì)或者不妥的地方請(qǐng)大家指出,謝謝。

1. Activity建立在哪些窗口組件之上?順帶涉及View的事件傳遞問題。

沒讀懂問題,=。=不知道是不是問Activity的UI結(jié)構(gòu),如果是可以參考這篇文章。

對(duì)于View的事件傳遞,則可以從 Activity --> ViewGroup --> ...... --> Activity U型 消費(fèi)結(jié)構(gòu)去說。

2. 什么情況下,Activity的onNewInstent()方法會(huì)執(zhí)行?Activity的啟動(dòng)模式相關(guān)。

當(dāng)此Activity的實(shí)例已經(jīng)存在,并且此時(shí)的啟動(dòng)模式為SingleTaskSingleInstance,另外當(dāng)這個(gè)實(shí)例位于棧頂且啟動(dòng)模式為SingleTop時(shí)也會(huì)觸發(fā)onNewInstent()。

3. Activity A使用startForResult啟動(dòng)Activity B,B什么都不做并返回A,A中的onActivityResult回調(diào)是否會(huì)執(zhí)行?

startActivity()方法,最終都是調(diào)用startActivityForResult()方法。默認(rèn)的requestCode = -1 resultCode = RESULT_CANCELED = 0,當(dāng)你的requestCode != -1時(shí),onActivityResult()一定會(huì)被調(diào)用。

4. Fragment能否不依賴于Activity存在?簡(jiǎn)析一下Fragment的棧管理。

Fragment不能獨(dú)立存在,它必須嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影響。

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

transaction只是記錄了從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的變化過程,即比如從FragmentA替換到FragmentB的過程,當(dāng)通過函數(shù)transaction.addToBackStack(null)將這個(gè)事務(wù)添加到回退棧,則會(huì)記錄這個(gè)事務(wù)的狀態(tài)變化過程,如從FragmentA —>FragmentB,當(dāng)用戶點(diǎn)擊手機(jī)回退鍵時(shí),因?yàn)閠ransaction的狀態(tài)變化過程被保存,則可以將事務(wù)的狀態(tài)變化過程還原,即將FragmentB —> FragmentA.

添加到回退棧的函數(shù):transaction.addToBackStack(null);

參考文章: http://blog.csdn.net/u011026329/article/details/47903177

5. 能否將一個(gè)Activity放到系統(tǒng)的最近任務(wù)列表里,獨(dú)立于宿主app任務(wù)卡之外?
我印象中是可以做到了,平時(shí)沒用到,知道的同學(xué)請(qǐng)@我,謝謝!
6. 對(duì)于同一個(gè)Service,在被start啟動(dòng)之后還能不能被bind?

服務(wù)基本上分為兩種形式:

啟動(dòng)
當(dāng)應(yīng)用組件(如 Activity)通過調(diào)用 startService() 啟動(dòng)服務(wù)時(shí),服務(wù)即處于“啟動(dòng)”狀態(tài)。一旦啟動(dòng),服務(wù)即可在后臺(tái)無限期運(yùn)行,即使啟動(dòng)服務(wù)的組件已被銷毀也不受影響。 已啟動(dòng)的服務(wù)通常是執(zhí)行單一操作,而且不會(huì)將結(jié)果返回給調(diào)用方。例如,它可能通過網(wǎng)絡(luò)下載或上傳文件。 操作完成后,服務(wù)會(huì)自行停止運(yùn)行。
綁定
當(dāng)應(yīng)用組件通過調(diào)用 bindService() 綁定到服務(wù)時(shí),服務(wù)即處于“綁定”狀態(tài)。綁定服務(wù)提供了一個(gè)客戶端-服務(wù)器接口,允許組件與服務(wù)進(jìn)行交互、發(fā)送請(qǐng)求、獲取結(jié)果,甚至是利用進(jìn)程間通信 (IPC) 跨進(jìn)程執(zhí)行這些操作。 僅當(dāng)與另一個(gè)應(yīng)用組件綁定時(shí),綁定服務(wù)才會(huì)運(yùn)行。 多個(gè)組件可以同時(shí)綁定到該服務(wù),但全部取消綁定后,該服務(wù)即會(huì)被銷毀。

雖然本文檔是分開概括討論這兩種服務(wù),但是您的服務(wù)可以同時(shí)以這兩種方式運(yùn)行,也就是說,它既可以是啟動(dòng)服務(wù)(以無限期運(yùn)行),也允許綁定。問題只是在于您是否實(shí)現(xiàn)了一組回調(diào)方法:onStartCommand()(允許組件啟動(dòng)服務(wù))和 onBind()(允許綁定服務(wù))。

來自官方文檔

7. Service有哪些派生類?這些派生類的使用場(chǎng)景是什么?

這個(gè)問題不知道問的具體是什么,如果是要 IntentService那么可以參考官方文檔的解釋與使用說明:
擴(kuò)展 IntentService 類
由于大多數(shù)啟動(dòng)服務(wù)都不必同時(shí)處理多個(gè)請(qǐng)求(實(shí)際上,這種多線程情況可能很危險(xiǎn)),因此使用 IntentService 類實(shí)現(xiàn)服務(wù)也許是最好的選擇。

IntentService 執(zhí)行以下操作:

創(chuàng)建默認(rèn)的工作線程,用于在應(yīng)用的主線程外執(zhí)行傳遞給 onStartCommand() 的所有 Intent。
創(chuàng)建工作隊(duì)列,用于將 Intent 逐一傳遞給 onHandleIntent() 實(shí)現(xiàn),這樣您就永遠(yuǎn)不必?fù)?dān)心多線程問題。
在處理完所有啟動(dòng)請(qǐng)求后停止服務(wù),因此您永遠(yuǎn)不必調(diào)用 stopSelf()。
提供 onBind() 的默認(rèn)實(shí)現(xiàn)(返回 null)。
提供 onStartCommand() 的默認(rèn)實(shí)現(xiàn),可將 Intent 依次發(fā)送到工作隊(duì)列和 onHandleIntent() 實(shí)現(xiàn)。
綜上所述,您只需實(shí)現(xiàn) onHandleIntent() 來完成客戶端提供的工作即可。(不過,您還需要為服務(wù)提供小型構(gòu)造函數(shù)。)

以下是 IntentService 的實(shí)現(xiàn)示例:

public class HelloIntentService extends IntentService {

  /**
   * A constructor is required, and must call the super IntentService(String)
   * constructor with a name for the worker thread.
   */
  public HelloIntentService() {
      super("HelloIntentService");
  }

  /**
   * The IntentService calls this method from the default worker thread with
   * the intent that started the service. When this method returns, IntentService
   * stops the service, as appropriate.
   */
  @Override
  protected void onHandleIntent(Intent intent) {
      // Normally we would do some work here, like download a file.
      // For our sample, we just sleep for 5 seconds.
      try {
          Thread.sleep(5000);
      } catch (InterruptedException e) {
          // Restore interrupt status.
          Thread.currentThread().interrupt();
      }
  }
}

您只需要一個(gè)構(gòu)造函數(shù)和一個(gè) onHandleIntent() 實(shí)現(xiàn)即可。

如果您決定還重寫其他回調(diào)方法(如 onCreate()、onStartCommand() 或 onDestroy()),請(qǐng)確保調(diào)用超類實(shí)現(xiàn),以便 IntentService 能夠妥善處理工作線程的生命周期。

例如,onStartCommand() 必須返回默認(rèn)實(shí)現(xiàn)(即,如何將 Intent 傳遞給 onHandleIntent()):

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    return super.onStartCommand(intent,flags,startId);
}

除 onHandleIntent() 之外,您無需從中調(diào)用超類的唯一方法就是 onBind()(僅當(dāng)服務(wù)允許綁定時(shí),才需要實(shí)現(xiàn)該方法)。

8. Service與其它組件之間的通信實(shí)現(xiàn)方式有哪些?

binder

broadcast

其他參見線程和進(jìn)程的通信方式

9. View的post(Runnable r)方法里,r會(huì)帶來一個(gè)新的線程嗎?多線程相關(guān)。

不會(huì),最終還是handler發(fā)送消息,執(zhí)行在UI線程。
如下是源碼和注釋:

    /**
     * 

Causes the Runnable to be added to the message queue. * The runnable will be run on the user interface thread.

* * @param action The Runnable that will be executed. * * @return Returns true if the Runnable was successfully placed in to the * message queue. Returns false on failure, usually because the * looper processing the message queue is exiting. * * @see #postDelayed * @see #removeCallbacks */ public boolean post(Runnable action) { final AttachInfo attachInfo = mAttachInfo; if (attachInfo != null) { return attachInfo.mHandler.post(action); } // Postpone the runnable until we know on which thread it needs to run. // Assume that the runnable will be successfully placed after attach. getRunQueue().post(action); return true; }
10. 在非UI線程中使用Handler需要注意哪些問題?
new Thread(){
        public void run(){
          Looper.prepare();//給當(dāng)前線程初始化Looper
          Toast.makeText(getApplicationContext(),"更新UI",0).show();//Toast初始化的時(shí)候會(huì)new Handler();無參構(gòu)造默認(rèn)獲取當(dāng)前線程的Looper,如果沒有prepare過,則拋出題主描述的異常。上一句代碼初始化過了,就不會(huì)出錯(cuò)。
          Looper.loop();//這句執(zhí)行,Toast排隊(duì)show所依賴的Handler發(fā)出的消息就有人處理了,Toast就可以吐出來了。但是,這個(gè)Thread也阻塞這里了,因?yàn)閘oop()是個(gè)for (;;) ...
        }
  }.start();

參考:
https://www.zhihu.com/questio...
https://www.zhihu.com/questio...

11. 自定義View時(shí)有哪些重要的方法,它們的作用及執(zhí)行順序是怎樣的?

按照順序:onMeasure() --> onLayout() --> onDraw().其他的自己擴(kuò)展吧。

12. 如何多帶帶對(duì)ListView上的一個(gè)item進(jìn)行更新?

更新對(duì)應(yīng)view的內(nèi)容

通過ViewHolder去設(shè)置值

調(diào)用一次getView()方法(Google IO 推薦)

參考文章 http://blog.csdn.net/linglongxin24/article/details/53020164

13. 簡(jiǎn)析一下大圖片的加載處理。

對(duì)Bitmap的理解,然后就是壓縮圖片。

14. 設(shè)計(jì)師只給了一套1280*800的UI圖標(biāo)注,如何進(jìn)行其它分辨率尺寸屏幕的適配?
名稱 像素密度范圍 圖片大小
mdpi 120dp~160dp 48×48px
hdpi 160dp~240dp 72×72px
xhdpi 240dp~320dp 96×96px
xxhdpi 320dp~480dp 144×144px
xxxhdpi 480dp~640dp 192×192px

以 720*1080 5英寸為例:
(720^2 + 1080^2)開方=260
放在xhdpi中。

本題中同理可以算得 293,還是xhdpi中。

15. 6.0系統(tǒng)新權(quán)限機(jī)制的解決方案。

這個(gè)。。。沒什么好說的,真正了解的很好說,不了解的話就有點(diǎn)繞。

? 你們精通的開源框架,問題來了

寫各種精通其實(shí)是可以的,要么真牛x,如果不是很牛x那就在最后加上一條精通----精通各種被打臉

16. EventBus的機(jī)制是什么?和Handler的區(qū)別怎樣?

EventBus是采用觀察者模式實(shí)現(xiàn)的事件訂閱總線,可以用在應(yīng)用程序中,組件之間,線程之間的通信,并且由于事件可以是任意類型的對(duì)象,所以使用起來更加的方便快捷。
Handler是 Android 的消息機(jī)制,集中解決線程間通信問題。

17. RxJava的機(jī)制是什么?

RxJava是使用Java語言,以響應(yīng)式編程思維來進(jìn)行編程的Java類庫。參考ReactiveX。

18. Butterknife的機(jī)制是什么?

Java Annotation Processing技術(shù),在Java代碼編譯成Java字節(jié)碼的時(shí)候就已經(jīng)處理了@Bind、@OnClick(ButterKnife還支持很多其他的注解)這些注解了。

Annotation processing 是javac中用于編譯時(shí)掃描和解析Java注解的工具
Annotation processing是在編譯階段執(zhí)行的,它的原理就是讀入Java源代碼,解析注解,然后生成新的Java代碼。新生成的Java代碼最后被編譯成Java字節(jié)碼,注解解析器(Annotation Processor)不能改變讀入的Java 類,比如不能加入或刪除Java方法。
參考:ButterKnife框架原理

19. Okhttp是基于HTTP連接還是Socket連接?

基于Http的。

20. 例舉一種ORM框架,說說它的優(yōu)缺點(diǎn)。

我熟悉的兩種GreenDao3AndroidActive,GreenDao 比較常規(guī),注解不多(我這里都是指3.0版本后,之前的版本在生存實(shí)體的時(shí)候略顯麻煩。),AndroidActive 相對(duì)而言注解較多,最后的綜合性能上 GreenDao 排第一毫無爭(zhēng)議。硬要說缺點(diǎn)的話就是 GreenDao 體積稍大。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66822.html

相關(guān)文章

  • Android-Java面試

    摘要:好不容易在月號(hào)這天中午點(diǎn)左右接到了來自阿里的面試電話。這里會(huì)不斷收集和更新基礎(chǔ)相關(guān)的面試題,目前已收集題。面試重難點(diǎn)的和的打包過程多線程機(jī)制機(jī)制系統(tǒng)啟動(dòng)過程,啟動(dòng)過程等等掃清面試障礙最新面試經(jīng)驗(yàn)分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發(fā)面試題總結(jié) 各大公司 Jav...

    TalkingData 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<