Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android經典面試題總結(未完待續)

Android經典面試題總結(未完待續)

編輯:關於Android編程

1.生命周期
這裡寫圖片描述
場景演示 : 切換到該Fragment
11-29 14:26:35.095: D/AppListFragment(7649): onAttach
11-29 14:26:35.095: D/AppListFragment(7649): onCreate
11-29 14:26:35.095: D/AppListFragment(7649): onCreateView
11-29 14:26:35.100: D/AppListFragment(7649): onActivityCreated
11-29 14:26:35.120: D/AppListFragment(7649): onStart
11-29 14:26:35.120: D/AppListFragment(7649): onResume
屏幕滅掉:
11-29 14:27:35.185: D/AppListFragment(7649): onPause
11-29 14:27:35.205: D/AppListFragment(7649): onSaveInstanceState
11-29 14:27:35.205: D/AppListFragment(7649): onStop

屏幕解鎖
11-29 14:33:13.240: D/AppListFragment(7649): onStart
11-29 14:33:13.275: D/AppListFragment(7649): onResume

切換到其他Fragment:
11-29 14:33:33.655: D/AppListFragment(7649): onPause
11-29 14:33:33.655: D/AppListFragment(7649): onStop
11-29 14:33:33.660: D/AppListFragment(7649): onDestroyView

切換回本身的Fragment:
11-29 14:33:55.820: D/AppListFragment(7649): onCreateView
11-29 14:33:55.825: D/AppListFragment(7649): onActivityCreated
11-29 14:33:55.825: D/AppListFragment(7649): onStart
11-29 14:33:55.825: D/AppListFragment(7649): onResume
回到桌面
11-29 14:34:26.590: D/AppListFragment(7649): onPause
11-29 14:34:26.880: D/AppListFragment(7649): onSaveInstanceState
11-29 14:34:26.880: D/AppListFragment(7649): onStZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcDxiciAvPg0Ku9i1vdOm08M8YnIgLz4NCjExLTI5IDE0OjM2OjUxLjk0MDogRC9BcHBMaXN0RnJhZ21lbnQoNzY0OSk6IG9uU3RhcnQ8YnIgLz4NCjExLTI5IDE0OjM2OjUxLjk0MDogRC9BcHBMaXN0RnJhZ21lbnQoNzY0OSk6IG9uUmVzdW1lPC9wPg0KPHA+zcuz9tOm08M8YnIgLz4NCjExLTI5IDE0OjM3OjAzLjAyMDogRC9BcHBMaXN0RnJhZ21lbnQoNzY0OSk6IG9uUGF1c2U8YnIgLz4NCjExLTI5IDE0OjM3OjAzLjE1NTogRC9BcHBMaXN0RnJhZ21lbnQoNzY0OSk6IG9uU3RvcDxiciAvPg0KMTEtMjkgMTQ6Mzc6MDMuMTU1OiBEL0FwcExpc3RGcmFnbWVudCg3NjQ5KTogb25EZXN0cm95VmlldzxiciAvPg0KMTEtMjkgMTQ6Mzc6MDMuMTY1OiBEL0FwcExpc3RGcmFnbWVudCg3NjQ5KTogb25EZXN0cm95PGJyIC8+DQoxMS0yOSAxNDozNzowMy4xNjU6IEQvQXBwTGlzdEZyYWdtZW50KDc2NDkpOiBvbkRldGFjaDwvcD4NCjxociAvPg0KPHA+PHN0cm9uZz4yLkFuZHJvaWTW0LXEQ29udGV4dCwgQWN0aXZpdHmjrEFwcGxpY3Rpb27T0Mqyw7TH+LHwo788L3N0cm9uZz48YnIgLz4NCs/gzayjukFjdGl2aXR5us1BcHBsaWNhdGlvbra8ysdDb250ZXh0tcTX08DgoaM8YnIgLz4NCkNvbnRleHS009fWw+bJz8DtveK+zcrHyc/Pws7EtcTS4su8o6zU2sq1vMrTptPD1tDL/NKyyLfKtcrHxvC1vcHLudzA7cnPz8LOxLu3vrPW0Lj3uPayzsr9us2x5MG/tcTX3NPDo6y3vbHjztLDx7/J0tS88rWltcS3w87Ktb2499bW18rUtKGjPGJyIC8+DQqyu82so7rOrLuktcTJ+sP81tzG2rK7zayhoyBDb250ZXh0zqy7pLXEyse1scewtcRBY3Rpdml0ebXEyfrD/NbcxtqjrEFwcGxpY2F0aW9uzqy7pLXEysfV+7j2z+7Ev7XEyfrD/NbcxtqhozxiciAvPg0KyrnTw2NvbnRleHS1xMqxuvKjrNCh0MTE2rTm0LnCtqOst8DWucTatObQucK2o6zXotLi0rvPwry4uPa3vcPmo7o8YnIgLz4NCqGhMS4gsrvSqsjDyfrD/NbcxtqzpLXEttTP89L908NhY3Rpdml0eSBjb250ZXh0o6y8tLGj1qTS/dPDYWN0aXZpdHm1xLbUz/PSqtPrYWN0aXZpdHmxvsntyfrD/NbcxtrKx9K70fm1xKGjPGJyIC8+DQqhoTIuILbU09rJ+sP81tzG2rOktcS21M/zo6y/ydLUyrnTw2FwcGxpY2F0aW9uo6xjb250ZXh0oaM8YnIgLz4NCqGhMy4gsdzD4rfHvrLMrLXExNqyv8Dgo6y+ocG/yrnTw76yzKzA4KOssdzD4sn6w/zW3MbazsrM4qOs16LS4sTasr/A4LbUzeKyv7bUz/PS/dPDtbzWwrXEyfrD/Nbcxtqx5LuvoaM8L3A+DQo8aHIgLz4NCjxwPjxzdHJvbmc+My7Bvbj2QWN0aXZpdHnWrrzktKu13cr9vt2jrLP9wctpbnRlbnSjrLnjsqW908rV1d+jrGNvbnRlbnQgcHJvdmlkZXK7udPQybajvzwvc3Ryb25nPjxiciAvPg0KMaOpwPvTw3N0YXRpY76yzKzK/b7do6xwdWJsaWMgc3RhdGljs8nUsbHkwb88YnIgLz4NCjKjqcD708PN4rK/tOa0orXEtKvK5KOsPGJyIC8+DQrA/cjnIEZpbGUgzsS8/rTmtKI8YnIgLz4NClNoYXJlZFByZWZlcmVuY2VzytfRoc/uPGJyIC8+DQpTcWxpdGUgyv2+3b/iPC9wPg0KPGhyIC8+DQo8cD48c3Ryb25nPjQuQ29udGV4dMrHyrLDtKO/PC9zdHJvbmc+PGJyIC8+DQoxoaLL/MPoyva1xMrH0ru49tOm08OzzNDyu7e+s7XE0MXPoqOsvLTJz8/CzsShozxiciAvPg0KMqGiuMPA4MrH0ru49rPpz/MoYWJzdHJhY3QgY2xhc3MpwOCjrEFuZHJvaWTM4bmpwcu4w7Ppz/PA4LXEvt/M5cq1z9bA4KOoQ29udGV4dEltbKOpoaM8YnIgLz4NCjOhos2ouf3L/M7Sw8e/ydLUu/HIodOm08OzzNDytcTXytS0us3A4KOs0rKw/MCo0rvQqdOm08O8trHwstnX96OswP3I56O6xvS2r9K7uPZBY3Rpdml0eaOst6LLzbnjsqWjrL3TytxJbnRlbnSjrNDFz6KjrLXIoaM8L3A+DQo8aHIgLz4NCjxwPjxzdHJvbmc+NS4g0rvM9dfus6S1xLbM0MXPotS81by24MnZIGJ5dGU/PC9zdHJvbmc+PGJyIC8+DQrW0M7ENzAoILD8wKix6rXjKSCjrNOizsQxNjAgo6wxNjAguPbX1r3aoaM8YnIgLz4NCtLyzqrTos7E19bEuLLJ08M3zrtBU0NJSbHgwuujrLb4urrX1tTyssnTwzjOu1VDUy0yseDC67Ki1bwyuPbX1r3ao6zL+dLUMTYwuPbX1rf7sLTV1TfOu0FTQ0lJseDC68C0u7vL46OsvLQxNjBYNz0xMTIwzruju7b4urrX1srHsLTV1TjOu7XEVUNTLTKx4MLro6y8tDjOu9K7uPbX1rf7o6zSu7j2urrX1tW8Mrj219a3+6Os1eLR+TExMjDOu7u7y+Ozybq619bK/b7NyscxMTIwLzgvMj03MKGjPC9wPg0KPGhyIC8+DQo8cD48c3Ryb25nPjYuIMjnus69q7Tyv6ogcmVzIGF3IMS/wrzW0LXEyv2+3b/izsS8/iA/PC9zdHJvbmc+PGJyIC8+DQq94rTwo7rU2iBBbmRyb2lkINbQsrvE3NaxvdO08r+qIHJlcyBhdyDEv8K81tC1xMr9vt2/4s7EvP6jrLb40OjSqtTas8zQ8rXa0ru0zsb0tq/Ksb2ruMPOxLz+uLTWxrW9yta7+sTatOa78iBTRCC/qLXExLO49sS/wrzW0KOsyLu689TZtPK/qrjDyv2+3b/izsS8/qGjuLTWxrXEu/mxvre9t6jKx8q508MgZ2V0UmVzb3VyY2VzKCkub3BlblJhd1Jlc291cmNlILe9t6i78bXDIHJlcyBhdyDEv8K81tDXytS0tcQgSW5wdXRTdHJlYW0gttTP86OsyLu6872ruMMgSW5wdXRTdHJlYW0gttTP89bQtcTK/b7d0LTI68bky/u1xMS/wrzW0M/g06bOxLz+1tCho9TaIEFuZHJvaWQgU0RLINbQv8nS1Mq508MgU1FMaXRlRGF0YWJhc2Uub3Blbk9yQ3JlYXRlRGF0YWJhc2Ugt723qMC0tPK/qsjO0uLEv8K81tC1xCBTUUxpdGUgyv2+3b/izsS8/qGjPC9wPg0KPGhyIC8+DQo8cD48c3Ryb25nPjcuQW5kcm9pZCDPtc2ztcS83Lm5PC9zdHJvbmc+PGJyIC8+DQphbmRyb2lkILXEz7XNs7zcubm6zcbkstnX98+1zbPSu9H5o6yyydPDwcu31rLjtcS83Lm5oaO007zcubnNvL+0o6wgYW5kcm9pZCC31s6qy8S49rLjo6y007jfsuO1vbXNsuO31rHwysfTptPDs8zQ8rLjoaLTptPDs8zQ8r/yvNyy46Giz7XNs9TL0NC/4rLjus0gbGludXggusvQxLLjoaM8YnIgLz4NCqGhoaEgMS4g06bTw7PM0PI8YnIgLz4NCqGhoaEgQW5kcm9pZCC74c2s0rvPtcHQusvQxNOm08OzzNDysPzSu8bwt6KyvKOsuMPTptPDs8zQ8rD8sPzAqCBlbWFpbCC/zbuntsujrCBTTVMgtszP+8+is8zQ8qOsyNXA+qOstdjNvKOs5K/AwMb3o6zBqs+1yMu53MDts8zQ8rXIoaPL+dPQtcTTptPDs8zQ8ra8ysfKudPDIEpBVkEg0+/R1LHg0LS1xKGjPGJyIC8+DQqhoaGhIDIuINOm08OzzNDyv/K83DxiciAvPg0KoaGhob+qt6LIy9Sx0rK/ydLUzerIq7fDzsq6y9DE06bTw7PM0PLL+cq508O1xCBBUEkgv/K83KGjuMPTptPDs8zQ8rXEvNy5ucnovMa88ruvwcvX6bz+tcTW2NPDIDsgyM66ztK7uPbTptPDs8zQ8ra8v8nS1LeisrzL/LXEuabE3L/psqLH0sjOus7G5Mv8tcTTptPDs8zQ8ra8v8nS1Mq508PG5Mv5t6KyvLXEuabE3L/pICggsru5/bXD1/HRrb/yvNy1xLCyyKvQ1M/e1sYgKSCho82s0fmjrLjD06bTw7PM0PLW2NPDu/rWxtKyyrnTw7unv8nS1Le9seO1xMzmu7uzzNDy1+m8/qGjPGJyIC8+DQqhoaGh0v6y2NTaw7+49tOm08O688PmtcTKx9K7z7XB0LXEt/7O8brNz7XNsyAsIMbk1tCw/MCoIDs8YnIgLz4NCqGhoaEgKiC34bi7tvjT1r/JwKnVubXEytPNvCAoVmlld3MpIKOsv8nS1NPDwLS5ub2o06bTw7PM0PKjrCDL/LD8wKjB0LHtIChsaXN0cykgo6zN+LjxIChncmlkcykgo6zOxLG+v/IgKHRleHQgYm94ZXMpIKOssLTFpSAoYnV0dG9ucykgo6wgyfXWwb/Jx7bI67XEIHdlYiDkr8DAxvehozxiciAvPg0KoaGhoSAqIMTayN3M4bmpxvcgKENvbnRlbnQgUHJvdmlkZXJzKSDKubXD06bTw7PM0PK/ydLUt8POysHt0ru49tOm08OzzNDytcTK/b7dICggyOfBqs+1yMvK/b7dv+IgKSCjrCC78tXfubLP7cv8w8fX1Ly6tcTK/b7dPGJyIC8+DQqhoaGhICog18rUtLncwO3G9yAoUmVzb3VyY2UgTWFuYWdlcikgzOG5qSC3x7T6wuvXytS0tcS3w87Ko6zI57G+tdjX1rf7tK6jrM280M6jrLrNsry+1s7EvP4gKCBsYXlvdXQgZmlsZXMgKSChozxiciAvPg0KoaGhoSAqIM2o1qq53MDtxvcgKE5vdGlmaWNhdGlvbiBNYW5hZ2VyKSDKubXD06bTw7PM0PK/ydLU1NrXtMyswLjW0M/Uyr7X1Lao0uW1xMzhyr7Qxc+ioaM8YnIgLz4NCqGhoaEgKiC77ravudzA7cb3ICggQWN0aXZpdHkgTWFuYWdlcikg08PAtLncwO3TptPDs8zQ8sn6w/zW3MbasqLM4bmps6PTw7XEtby6vbvYzcu5psTcoaM8YnIgLz4NCqGhoaHT0LnYuPy24LXEz7i92rrN1PXR+bTTzbfQtNK7uPbTptPDs8zQ8qOsx+uyzr+8IMjnus6x4NC00ru49iBBbmRyb2lkINOm08OzzNDyIC48YnIgLz4NCqGhoaEgMy4gz7XNs9TL0NC/4jxiciAvPg0KoaGhoSAxKSCzzNDyv+I8YnIgLz4NCqGhoaEgQW5kcm9pZCCw/Lqs0rvQqSBDL0MrKyC/4qOs1eLQqb/ixNyxuyBBbmRyb2lkIM+1zbPW0LK7zay1xNfpvP7KudPDoaPL/MPHzai5/SBBbmRyb2lkINOm08OzzNDyv/K83M6qv6q3otXfzOG5qbf+zvGho9LUz8LKx9K70Km6y9DEv+KjujxiciAvPg0KoaGhoSAqIM+1zbMgQyC/4iAtINK7uPa00yBCU0QgvMyz0MC0tcSx6te8IEMgz7XNs7qvyv2/4iAoIGxpYmMgKSCjrCDL/MrH16jDxc6qu/nT2iBlbWJlZGRlZCBsaW51eCC1xMnosbi2qNbGtcShozxiciAvPg0KoaGhoSAqIMO9zOW/4iAtILv509ogUGFja2V0VmlkZW8gT3BlbkNPUkU7ILjDv+LWp7PWtuDW1rOj08O1xNL0xrWhosrTxrW48cq9u9i3xbrNwrzWxqOszazKsdans9a+ssyszbzP8c7EvP6ho7Hgwuu48cq9sPzAqCBNUEVHNCwgSC4yNjQsIE1QMywgQUFDLCBBTVIsIEpQRywgUE5HIKGjPGJyIC8+DQqhoaGhICogU3VyZmFjZSBNYW5hZ2VyIC0gttTP1Mq+19PPtc2ztcS53MDto6yyosfSzqq24Lj206bTw7PM0PLM4SC5qcHLIDJEILrNIDNEIM28suO1xM7et+zI2rrPoaM8YnIgLz4NCqGhoaEgKiBMaWJXZWJDb3JlIC0g0ru49tfu0MK1xCB3ZWIg5K/AwMb30v3H5tPDo6zWp7PWIEFuZHJvaWQg5K/AwMb3us3Su7j2v8nHtsjrtcQgd2ViIMrTzbyhozxiciAvPg0KoaGhoSAqIFNHTCAtILXXsuO1xCAyRCDNvNDO0v3H5jxiciAvPg0KoaGhoSAqIDNEIGxpYnJhcmllcyAtILv509ogT3BlbkdMIEVTIDEuMCBBUElzIMq1z9YgOyC4w7/iv8nS1Mq508PTsrz+IDNEILzTy9kgKCDI57n7v8nTwyApILvy1d/KudPDuN+2yNPFu6+1xCAzRCDI7bzTy9mhozxiciAvPg0KoaGhoSAqIEZyZWVUeXBlIC0gzrvNvCAoYml0bWFwKSC6zcq4wb8gKHZlY3Rvcikg19bM5c/Uyr6hozwvcD4NCjxwPqGhoaEgKiBTUUxpdGUgLSDSu7j2ttTT2sv509DTptPDs8zQ8r/J08OjrLmmxNzHv76itcTH4dDNudjPtdDNyv2+3b/i0v3H5qGjPGJyIC8+DQqhoaGhIDIpQW5kcm9pZCDUy9DQv+I8YnIgLz4NCqGhoaEgQW5kcm9pZCCw/MCowcvSu7j2usvQxL/io6y4w7rL0MS/4szhuanByyBKQVZBILHgs8zT79HUusvQxL/itcS087bgyv25psTcoaM8YnIgLz4NCqGhoaHDv9K7uPYgQW5kcm9pZCDTptPDs8zQ8ra81NrL/NfUvLq1xL34s8zW0NTL0NCjrLa807XT0NK7uPa2wMGitcQgRGFsdmlrINDpxOK7+sq1wP2hoyBEYWx2aWsgsbvJ6LzGs8nSu7j2yeixuL/J0tTNrMqxuN/Qp7XY1MvQ0LbguPbQ6cTiz7XNs6GjIERhbHZpayDQ6cTiu/rWtNDQICguZGV4KSC1xCBEYWx2aWsgv8nWtNDQzsS8/qOsuMO48cq9zsS8/tXrttTQocTatObKudPD1/bBy9PFu6+ho82syrHQ6cTiu/rKx7v509q8xLTmxve1xKOsy/nT0LXEwOC2vL6t08kgSkFWQSCx4NLrxvex4NLro6zIu7rzzai5/SBTREsg1tAgtcQgJmxkcXVvOyBkeCAmcmRxdW87ILmkvt/Xqruvs8kgLmRleCC48cq908nQ6cTiu/rWtNDQoaM8YnIgLz4NCqGhoaEgRGFsdmlrINDpxOK7+tLAwLXT2iBsaW51eCDE2rrLtcTSu9CpuabE3KOsscjI58/fs8y7+tbGus2117LjxNq05rncwO27+tbGoaM8YnIgLz4NCqGhoaEgNC5MaW51eCDE2rrLPGJyIC8+DQpBbmRyb2lkILXEusvQxM+1zbO3/s7x0sDAtdPaIExpbnV4IDIuNiDE2rrLo6zI57CyyKvQ1KOsxNq05rncwO2jrL34s8y53MDto6wgzfjC59Ct0unVu7rNx/22r8Sj0M2hoyBMaW51eCDE2rrL0rLNrMqx1/fOqtOyvP66zcjtvP7Vu9auvOS1xLPpz/Oy46GjPC9wPg0KPGhyIC8+DQo8cD48c3Ryb25nPjguIMfrvenJ3M/CIEFuZHJvaWQg1tCzo9PDtcTO5dbWsry+1jwvc3Ryb25nPjxiciAvPg0KQW5kcm9pZCCyvL7WysfTptPDvefD5r+qt6K1xNbY0qrSu7u3o6zU2iBBbmRyb2lkINbQo6y5stPQzuXW1rK8vta3vcq9o6y31rHwysejuiBGcmFtZUxheW91dCCjqL/yvNyyvL7Wo6mjrExpbmVhckxheW91dCCjqM/f0NSyvL7Wo6mjrEFic29sdXRlTGF5b3V0IKOovvi21LK8vtajqaOsIFJlbGF0aXZlTGF5b3V0IKOoz+C21LK8vtajqaOsIFRhYmxlTGF5b3V0IKOose248bK8vtajqaGjPC9wPg0KPGhyIC8+DQo8cD48c3Ryb25nPjkuIMjnus7G9NPDIFNlcnZpY2Ugo6zI57rOzaPTwyBTZXJ2aWNlPC9zdHJvbmc+PGJyIC8+DQpBbmRyb2lkINbQtcS3/s7xus0gd2luZG93cyDW0LXEt/7O8crHwODLxrXEtqvO96Ost/7O8dK7sOPDu9PQ08O7p7LZ1/e958Pmo6zL/NTL0NDT2s+1zbPW0LK7yN3S17G708O7p7eivvWjrL/J0tTKudPDy/y/qreiyOe84L/Y1q7A4LXEs8zQ8qGjt/7O8bXEv6q3orHIvc+88rWlo6zI58/Co7o8YnIgLz4NCrXa0ruyvaO6vMyz0CBTZXJ2aWNlIMDgPGJyIC8+DQpwdWJsaWMgY2xhc3MgU01TU2VydmljZSBleHRlbmRzIFNlcnZpY2UgezxiciAvPg0KfTxiciAvPg0Ktdq2/rK9o7rU2iBBbmRyb2lkTWFuaWZlc3QueG1sIM7EvP7W0LXEIL3atePA77bUt/7O8b340NDF5NbDIDo8L3A+DQo8cD63/s7xsrvE3NfUvLrUy9DQo6zQ6NKqzai5/bX308MgQ29udGV4dC5zdGFydFNlcnZpY2UoKSC78iBDb250ZXh0LmJpbmRTZXJ2aWNlKCkgt723qMb0tq+3/s7xoaPV4sG9uPa3vbeotry/ydLUxvS2ryBTZXJ2aWNlIKOstavKx8v8w8e1xMq508OzobrP09DL+bK7zayho8q508Mgc3RhcnRTZXJ2aWNlKCkgt723qMb008O3/s7xo6y199PD1d/T67f+zvHWrrzkw7vT0LnYwayjrLy0yrm199PD1d/Ny7P2wcujrLf+zvHI1Mi71MvQ0KGjyrnTwyBiaW5kU2VydmljZSgpILe9t6jG9NPDt/7O8aOstffTw9Xf0+u3/s7xsPO2qNTawcvSu8bwo6y199PD1d/Su7Wpzcuz9qOst/7O8dKyvs3W1da5o6y089PQJmxkcXVvO7K7x/PNrMqxyfqjrLHY0OvNrMqxy8AmcmRxdW87tcTM2LXjoaM8L3A+DQo8cD7I57n7tPLL47LJ08MgQ29udGV4dC5zdGFydFNlcnZpY2UoKSC3vbeoxvS2r7f+zvGjrNTat/7O8c60sbu0tL2oyrGjrM+1zbO74c/ItffTw7f+zvG1xCBvbkNyZWF0ZSgpILe9t6ijrL3T18W199PDIG9uU3RhcnQoKSC3vbeooaPI57n7tffTwyBzdGFydFNlcnZpY2UoKSC3vbeox7C3/s7x0tG+rbG7tLS9qKOstuC0zrX308Mgc3RhcnRTZXJ2aWNlKCkgt723qLKisru74bW81sK24LTOtLS9qLf+zvGjrLWru+G1vNbCtuC0zrX308Mgb25TdGFydCgpILe9t6iho7LJ08Mgc3RhcnRTZXJ2aWNlKCkgt723qMb0tq+1xLf+zvGjrNa7xNy199PDIENvbnRleHQuc3RvcFNlcnZpY2UoKSC3vbeoveHK+Lf+zvGjrLf+zvG94cr4yrG74bX308Mgb25EZXN0cm95KCkgt723qKGjPC9wPg0KPHA+yOe5+7Tyy+OyydPDIENvbnRleHQuYmluZFNlcnZpY2UoKSC3vbeoxvS2r7f+zvGjrNTat/7O8c60sbu0tL2oyrGjrM+1zbO74c/ItffTw7f+zvG1xCBvbkNyZWF0ZSgpILe9t6ijrL3T18W199PDIG9uQmluZCgpILe9t6iho9XiuPbKsbrytffTw9Xfus23/s7xsPO2qNTa0rvG8KOstffTw9Xfzcuz9sHLo6zPtc2zvs274c/ItffTw7f+zvG1xCBvblVuYmluZCgpILe9t6ijrL3T18W199PDIG9uRGVzdHJveSgpILe9t6iho8jnufu199PDIGJpbmRTZXJ2aWNlKCkgt723qMewt/7O8dLRvq2xu7DztqijrLbgtM6199PDIGJpbmRTZXJ2aWNlKCkgt723qLKisru74bW81sK24LTOtLS9qLf+zvG8sLDztqggKCDSsr7NysfLtSBvbkNyZWF0ZSgpILrNIG9uQmluZCgpILe9t6iyorK7u+Gxu7bgtM6199PDICkgoaPI57n7tffTw9Xfz6PN+9Pr1f3U2rDztqi1xLf+zvG94rP9sPO2qKOsv8nS1LX308MgdW5iaW5kU2VydmljZSgpILe9t6ijrLX308O4w7e9t6jSsrvhtbzWws+1zbO199PDt/7O8bXEIG9uVW5iaW5kKCkmbmRhc2g7Jmd0O29uRGVzdHJveSgpILe9t6ihozxiciAvPg0Kt/7O8bOj08PJ+sP81tzG2rvYtfe3vbeoyOfPwqO6PGJyIC8+DQpvbkNyZWF0ZSgpILjDt723qNTat/7O8bG7tLS9qMqxtffTw6OsuMO3vbeo1ru74bG7tffTw9K7tM6jrM7ewtu199PDtuDJ2bTOIHN0YXJ0U2VydmljZSgpILvyIGJpbmRTZXJ2aWNlKCkgt723qKOst/7O8dKy1ruxu7S0vajSu7TOoaM8YnIgLz4NCm9uRGVzdHJveSgpILjDt723qNTat/7O8bG71tXWucqxtffTw6GjPC9wPg0KPHA+0+uyydPDIENvbnRleHQuc3RhcnRTZXJ2aWNlKCkgt723qMb0tq+3/s7x09C52LXEyfrD/Nbcxtq3vbeoPGJyIC8+DQpvblN0YXJ0KCkg1rvT0LLJ08MgQ29udGV4dC5zdGFydFNlcnZpY2UoKSC3vbeoxvS2r7f+zvHKsbLFu+G72LX3uMO3vbeooaO4w7e9t6jU2rf+zvG/qsq81MvQ0Mqxsbu199PDoaO24LTOtffTwyBzdGFydFNlcnZpY2UoKSC3vbeovqG53LK7u+G24LTOtLS9qLf+zvGjrLWrIG9uU3RhcnQoKSC3vbeou+Gxu7bgtM6199PDoaM8L3A+DQo8cD7T67LJ08MgQ29udGV4dC5iaW5kU2VydmljZSgpILe9t6jG9Lavt/7O8dPQudi1xMn6w/zW3Mbat723qDxiciAvPg0Kb25CaW5kKCkg1rvT0LLJ08MgQ29udGV4dC5iaW5kU2VydmljZSgpILe9t6jG9Lavt/7O8cqxssW74bvYtfe4w7e9t6iho7jDt723qNTatffTw9Xf0+u3/s7xsPO2qMqxsbu199PDo6y1sbX308PV39Prt/7O8dLRvq2w87aoo6y24LTOtffTwyBDb250ZXh0LmJpbmRTZXJ2aWNlKCkgt723qLKisru74bW81sK4w7e9t6ixu7bgtM6199PDoaM8YnIgLz4NCm9uVW5iaW5kKCkg1rvT0LLJ08MgQ29udGV4dC5iaW5kU2VydmljZSgpILe9t6jG9Lavt/7O8cqxssW74bvYtfe4w7e9t6iho7jDt723qNTatffTw9Xf0+u3/s7xveKz/bDztqjKsbG7tffTwzwvcD4NCjxwPrLJ08MgQ29udGV4dC5zdGFydFNlcnZpY2UoKSC3vbeoxvS2r7f+zvG1xLT6wuvI58/Co7o8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;"> public class HelloActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ...... Button button =(Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(HelloActivity.this, SMSService.class); startService(intent); }}); } }

采用 Context. bindService() 方法啟動服務的代碼如下:

public class HelloActivity extends Activity {
     ServiceConnection conn = new ServiceConnection() {
              public void onServiceConnected(ComponentName name, IBinder service) {
           }
           public void onServiceDisconnected(ComponentName name) {
           }
     };
    @Override
       public void onCreate(Bundle savedInstanceState) {
        Button button =(Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
               public void onClick(View v) {
                  Intent intent = new Intent(HelloActivity.this, SMSService.class);
                  bindService(intent, conn, Context.BIND_AUTO_CREATE);
                  //unbindService(conn);// 解除綁定
          }});      
    }
}

10. 廣播接收者生命周期
一個廣播接收者有一個回調方法: void onReceive(Context curContext , Intent broadcastMsg ) 。當一個廣播消息到達接收者是, Android 調用它的 onReceive() 方法並傳遞給它包含消息的 Intent 對象。廣播接收者被認為僅當它執行這個方法時是活躍的。當 onReceive() 返回後,它是不活躍的。
有一個活躍的廣播接收者的進程是受保護的,不會被殺死。但是系統可以在任何時候殺死僅有不活躍組件的進程,當占用的內存別的進程需要時。
這帶來一個問題,當一個廣播消息的響應時費時的,因此應該在獨立的線程中做這些事,遠離用戶界面其它組件運行的主線程。如果 onReceive() 衍生線程然後返回,整個進程,包括新的線程,被判定為不活躍的(除非進程中的其它應用程序組件是活躍的),將使它處於被殺的危機。解決這個問題的方法是 onReceive() 啟動一個服務,及時服務做這個工作,因此系統知道進程中有活躍的工作在做。


11. 設計模式和 IoC( 控制反轉 )
Android 框架魅力的源泉在於 IoC ,在開發 Android 的過程中你會時刻感受到 IoC 帶來
的巨大方便,就拿 Activity 來說,下面的函數是框架調用自動調用的:
protected void onCreate(Bundle savedInstanceState) ;
不是程序編寫者主動去調用,反而是用戶寫的代碼被框架調用,這也就反轉
了!當然 IoC 本身的內涵遠遠不止這些,但是從這個例子中也可以窺視出 IoC
帶來的巨大好處。此類的例子在 Android 隨處可見,例如說數據庫的管理類,
例如說 Android 中 SAX 的 Handler 的調用等。有時候,您甚至需要自己編寫簡
單的 IoC 實現,上面展示的多線程現在就是一個說明。


12. 什麼是 ANR 如何避免它 ?
ANR : Application Not Responding ,五秒
在 Android 中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列情況時, Android 就會顯示 ANR 對話框了:
  對輸入事件 ( 如按鍵、觸摸屏事件 ) 的響應超過 5 秒
  意向接受器 (intentReceiver) 超過 10 秒鐘仍未執行完畢
   Android 應用程序完全運行在一個獨立的線程中 ( 例如 main) 。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發 ANR 。因為此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播 (Intent broadcast) 。

  因此,任何運行在主線程中的方法,都要盡可能的只做少量的工作。特別是活動生命周期中的重要方法如 onCreate() 和 onResume() 等更應如此。潛在的比較耗時的操作,如訪問網絡和數據庫 ; 或者是開銷很大的計算,比如改變位圖的大小,需要在一個單獨的子線程中完成 ( 或者是使用異步請求,如數據庫操作 ) 。但這並不意味著你的主線程需要進入阻塞狀態已等待子線程結束 – 也不需要調用 Therad.wait() 或者 Thread.sleep() 方法。取而代之的是,主線程為子線程提供一個句柄 (Handler) ,讓子線程在即將結束的時候調用它 (xing: 可以參看 Snake 的例子,這種方法與以前我們所接觸的有所不同 ) 。使用這種方法涉及你的應用程序,能夠保證你的程序對輸入保持良好的響應,從而避免因為輸入事件超過 5 秒鐘不被處理而產生的 ANR 。這種實踐需要應用到所有顯示用戶界面的線程,因為他們都面臨著同樣的超時問題。


13、兩個Activity之間跳轉時必然會執行的是哪幾個方法?
一般情況下比如說有兩個activity,分別叫A,B,當在A裡面激活B組件的時候, A會調用 onPause()方法,然後B調用onCreate() ,onStart(), onResume()。

這個時候B覆蓋了窗體, A會調用onStop()方法. 如果B是個透明的,或者是對話框的樣式, 就不會調用A的onStop()方法。


14.單例模式
見http://blog.csdn.net/jason0539/article/details/23297037/


15.Listview列表效率優化
(1)利用convertview回收視圖
(2)采用ViewHolder模式
(3) 異步加載圖片
(4) 快速滑動時不加載圖片
(5) 如果自定義的item中有圖片,需要處理圖片(減少圖片所占內存)
1.對圖片進行邊界壓縮 2.用option類來保存圖片大小 3.避免圖片的實時縮放,最好預先縮放到視圖大小
(6)盡量避免在listview適配器中使用線程,因為線程是產生內存洩露的主要原因在於線程的生命周期不可控。


16.應用內存優化
(1)bitmap設置圖片大小(優化內存溢出)
BitmapFactory.Option option = new BitmapFactory.Option();
option.inSampleSize = 2; //將視圖寬、高都變為原來的1/2
(2)bitmap對象銷毀,可以借助recycle()方法讓GC回收bitmap對象。
(3)盡量避免static成員變量引用資源消耗過多的實例,如:context
(4)使用Application的context
(5)及時關閉資源,如在查詢數據庫時需要及時關閉cursor
(6)對經常使用的圖片使用軟引用保存
(7)線程也是造成內存洩露的一個重要原因,在於線程的生命周期不可控制,解決方法:
1.將線程內部類改為靜態內部類
2.用弱引用來保存context引用
(8)使用.9圖片


17.數據存儲的方法
sharedpreference存儲、文件存儲、SQLite存儲、contentprovide存儲、網絡存儲數據


18.set、List的區別:Set中元素不重復
存放的是對象的引用,沒有重復對象

   Set set=new HashSet();
  String s1=new String("hello");
  String s2=s1;
  String s3=new String("world");
  set.add(s1);
  set.add(s2);
  set.add(s3);
  System.out.println(set.size());//打印集合中對象的數目 為 2。

補充:
ArrayList() : 代表長度可以改變得數組。可以對元素進行隨機的訪問,向ArrayList()中插入與
與刪除元素的速度慢。
LinkedList(): 在實現中采用鏈表數據結構。插入和刪除速度快,訪問速度慢。


18.靜態內部類
(1)非靜態內部類中bunengdingy靜態成員變量和方法
(2)外部類和非靜態內部類之間可以互相訪問自己的私有成員
(3)靜態內部類只能訪問外部類的靜態成員


19.handler機制的原理
andriod提供了Handler和Looper來滿足線程間的通信。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)。
1)Looper:一個線程可以產生一個Looper對象,由它來管理此線程裡的MessageQueue(消息隊列)。
2)Handler:你可以構造Handler對象來與Looper溝通,以便push新消息到MessageQueue裡;或者接收Looper從MessageQueue取出)所送來的消息。
3)MessageQueue(消息隊列):用來存放線程放入的消息。
4)線程:UIthread通常就是mainthread,而Android啟動程序時會替它建立一個MessageQueue。


20.assest文件夾裡放文件,對於文件的大小有沒有限制?
答案解析 assets目錄更像一個附錄類型的目錄,Android不會為這個目錄中的文件生成ID並保存在R類當中,因此它與Android中的一些類和方法兼容度更低。 同時,由於你需要一個字符串路徑來獲取這個目錄下的文件描述符,訪問的速度會更慢。但是把一些文件放在這個目錄下會使一些操作更加方便,比方說拷貝一個數據庫文件到系統內存中。要注意的是,你無法在Android XML文件中引用到assets目錄下的文件,只能通過AssetManager來訪問這些文件。數據庫文件和游戲數據等放在這個目錄下是比較合適的。另外,網上關於assets和raw的資料都千篇一律了,因此關於這兩者中單個文件大小不能超過1M的錯誤描述也在傳播,即如果讀取超過1M的文件會報”Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)”的IOException,還引申出種種解決方案。個人認為不應該有這樣的限制,為了驗證這個說法寫了個Demo,發現將近5M的壓縮包在assets和raw中都能正常訪問,因此在這裡糾正一下,理論上只要打包不超過Android APK 50M大小的限制都是沒有問題的。當然了,不排除是Android很早期的時候因為設備硬件原因aapt在編譯的時候對這兩個文件夾大小做出了限制,如果是這樣,較新版的ADT應該不會出現這種情況。


21.進程銷毀優先級以及各自含義。
重要性依次是:前台進程,可見進程,服務進程,後台進程和空進程;所以銷毀的順序是逆方向。
前台進程(foreground): 目前正在屏幕上顯示的進程和一些系統進程。舉例來說,Dialer Storage,Google
Search等系統進程就是前台進程;再舉例來說,當你運行一個程序,如浏覽器,當浏覽器界面在前台顯示時,浏覽器屬於前台進程(foreground),但一旦你按home回到主界面,浏覽器就變成了後台程序(background)。
我們最不希望終止的進程就是前台進程。 可見進程(visible):
可見進程是一些不在前台,但用戶依然可見的進程,舉個例來說:widget、輸入法等,都屬於visible。這部分進程雖然不在前台,但與我們的使用也密切相關,我們也不希望它們被終止(你肯定不希望時鐘、天氣,新聞等widget被終止,那它們將無法同步,你也不希望輸入法被終止,否則你每次輸入時都需要重新啟動輸入法)
次要服務(secondary server):
目前正在運行的一些服務(主要服務,如撥號等,是不可能被進程管理終止的,故這裡只談次要服務),舉例來說:谷歌企業套件,Gmail內部存儲,聯系人內部存儲等。這部分服務雖然屬於次要服務,但很一些系統功能依然息息相關,我們時常需要用到它們,所以也太希望他們被終止
後台進程(hidden):
雖然用了hidden這個詞,但實際即是後台進程(background),就是我們通常意義上理解的啟動後被切換到後台的進程,如浏覽器,閱讀器等。當程序顯示在屏幕上時,他所運行的進程即為前台進程(foreground),一旦我們按home返回主界面(注意是按home,不是按back),程序就駐留在後台,成為後台進程(background)。後台進程的管理策略有多種:有較為積極的方式,一旦程序到達後台立即終止,這種方式會提高程序的運行速度,但無法加速程序的再次啟動;也有較消極的方式,盡可能多的保留後台程序,雖然可能會影響到單個程序的運行速度,但在再次啟動已啟動的程序時,速度會有所提升。這裡就需要用戶根據自己的使用習慣找到一個平衡點
內容供應節點(content provider):
沒有程序實體,僅僅提供內容供別的程序去用的,比如日歷供應節點,郵件供應節點等。在終止進程時,這類程序應該有較高的優先權 空進程(empty):
沒有任何東西在內運行的進程,有些程序,比如BTE,在程序退出後,依然會在進程中駐留一個空進程,這個進程裡沒有任何數據在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些歷史信息。
這部分進程無疑是應該最先終止的。 補充:
系統會對進程的重要性進行評估,並將重要性以“oom_adj”這個數值表示出來,賦予各個進程;(系統會根據“oom_adj”來判斷需要結束哪些進程,一般來說,“oom_adj”的值越大,該進程被系統選中終止的可能就越高)
前台程序的“oom_adj”值為0,這意味著它不會被系統終止,一旦它不可訪問後,會獲得個更高的“oom_adj”,推測“oom_adj”的值是根據軟件在LRU列表中的位置所決定的; Android不同於Linux,有一套自己獨特的進程管理模塊,這個模塊有更強的可定制性,可根據“oom_adj”值的范圍來決定進程管理策略,比如可以設定“當內存小於X時,結束“oom_adj”大於Y的進程”。這給了進程管理腳本的編寫以更多的選擇。


22.Adapter有什麼作用?常見的Adapter有哪些?
Adapter是連接後端數據和前端顯示的適配器接口。常見的Adapter有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter等


23.啟動一個程序,可以主界面點擊圖標進入,也可以從一個程序中跳轉過去,二者有什麼區別?
是因為啟動程序(主界面也是一個app),發現了在這個程序中存在一個設置為的activity, 所以這個launcher會把icon提出來,放在主界面上。當用戶點擊icon的時候,發出一個Intent: Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage(packageName); mActivity.startActivity(intent); 跳過去可以跳到任意允許的頁面,如一個程序可以下載,那麼真正下載的頁面可能不是首頁(也有可能是首頁),這時還是構造一個Intent,startActivity. 這個intent中的action可能有多種view,download都有可能。系統會根據第三方程序向系統注冊的功能,為你的Intent選擇可以打開的程序或者頁面。所以唯一的一點 不同的是從icon的點擊啟動的intent的action是相對單一的,從程序中跳轉或者啟動可能樣式更多一些。本質是相同的。


24.Android提供了5種方式存儲數據
(1)使用SharedPreferences存儲數據;它是Android提供的用來存儲一些簡單配置信息的一種機制,采用了XML格式將數據存儲到設備中。只能在同一個包內使用,不能在不同的包之間使用。 (2)文件存儲數據;文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設備上的文件。
(3)SQLite數據庫存儲數據;SQLite是Android所帶的一個標准的數據庫,它支持SQL語句,它是一個輕量級的嵌入式數據庫。
(4)使用ContentProvider存儲數據;主要用於應用程序之間進行數據交換,從而能夠讓其他的應用保存或讀取此Content Provider的各種數據類型。
(5)網絡存儲數據;通過網絡上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網絡空間中的數據信息。


25.AsyncTask使用在哪些場景?它的缺陷是什麼?如何解決?
答案解析 AsyncTask 運用的場景就是我們需要進行一些耗時的操作,耗時操作完成後更新主線程,或者在操作過程中對主線程的UI進行更新。 缺陷:AsyncTask中維護著一個長度為128的線程池,同時可以執行5個工作線程,還有一個緩沖隊列,當線程池中已有128個線程,緩沖隊列已滿時,如果 此時向線程提交任務,將會拋出RejectedExecutionException。 解決:由一個控制線程來處理AsyncTask的調用判斷線程池是否滿了,如果滿了則線程睡眠否則請求AsyncTask繼續處理。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved