日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android面试题总结加强版(二)

發布時間:2023/12/4 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android面试题总结加强版(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://blog.csdn.net/superjunjin/article/details/7855995

16.Android常用控件的信息

單選框(RadioButtonRadioGroup)

RadioGroup用于對單選框進行分組相同組內的單選框只有一個單選框被選中

事件:setOnCheckedChangeListener(),處理單選框被選擇事件。把RadioGroup.OnCheckedChangeListener實例作為參數傳入。


多選框(CheckBox):

每個多選框都是獨立的,可以通過迭代所有的多選框,然后根據其狀態是否被選中在獲取其值。

事件:setOnCheckedChangeListener(),處理多選框被選擇事件。把CheckBox.OnCheckedChangeListener()實例作為參數傳入。


下拉列表框(Spinner)

Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());獲取下拉列表框的值。

事件:setOnItemSelectedListener(),處理下拉列表框被選擇事件把Spinner.OnItemSelectedListener()實例作為參數傳入。


拖動條(SeekBar)

SeekBar.getProgress()獲取拖動條當前值

事件:setOnSeekBarChangeListener(),處理拖動條值變化事件,把SeekBar.OnSeekBarChangeListener實例作為參數傳入。


菜單(Menu):

重寫ActivityonCreatOptionMenu(Menu?menu)方法,該方法用于創建選項菜單,當用戶按下手機的"Menu"按鈕時就會顯示創建好的菜單,在onCreatOptionMenu(Menu?Menu)方法內部可以調用Menu.add()方法實現菜單的添加。

重寫ActivityonMenuItemSelected()方法,該方法用于處理菜單被選擇事件。


進度對話框(ProgressDialog)

創建并顯示一個進度對話框:ProgressDialog.show(ProgressDialogActivity.this,"請稍等""數據正在加載中...."true)

設置對話框的風格:setProgressStyle()

ProgressDialog.STYLE_SPINNER??旋轉進度條風格(為默認風格)

ProgressDialog.STYLE_HORIZONTAL?橫向進度條風格

(補充)

下面是各種常用控件的事件監聽的使用
①EditText(編輯框)的事件監聽---OnKeyListener
②RadioGroup、RadioButton(單選按鈕)的事件監聽---OnCheckedChangeListener
③CheckBox(多選按鈕)的事件監聽---OnCheckedChangeListener
④Spinner(下拉列表)的事件監聽---OnItemSelectedListener
⑤Menu(菜單)的事件處理---onMenuItemSelected
⑥Dialog(對話框)的事件監聽---DialogInterface.OnClickListener()
http://www.iteye.com/topic/1060815

17.請介紹下Android中常用的五種布局

Android布局是應用界面開發的重要一環,在Android中,共有五種布局方式,分別是:FrameLayout(幀布局),LinearLayout?(線性布局),

AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。?

??1.FrameLayout????

? ? ? ?這個布局可以看成是墻腳堆東西,有一個四方的矩形的左上角墻腳,我們放了第一個東西,要再放一個,那就在放在原來放的位置的上面,這樣依次的放,會蓋住原來的東西。這個布局比較簡單,也只能放一點比較簡單的東西。????

? 2.LinearLayout????

? ? ? ?線性布局,這個東西,從外框上可以理解為一個div,他首先是一個一個從上往下羅列在屏幕上。每一個LinearLayout里面又可分為垂直布局?(android:orientation="vertical")和水平布局(android:orientation="horizontal"?)。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。????

LinearLayout中有一個重要的屬性?android:layout_weight="1",這個weight在垂直布局時,代表行距;水平的時候代表列寬;weight值越大就越大。????

? 3.AbsoluteLayout????

? ? ? ?絕對布局猶如div指定了absolute屬性,用X,Y坐標來指定元素的位置android:layout_x="20px"?android:layout_y="12px"?這種布局方式也比較簡單,但是在垂直隨便切換時,往往會出問題,而且多個元素的時候,計算比較麻煩。????

4.RelativeLayout????

????相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:????

????相對于某一個元素????

????android:layout_below="@id/aaa"?該元素在?idaaa的下面????

????android:layout_toLeftOf="@id/bbb"?該元素在?idbbb的左邊?????

?????相對于父元素的地方????

?????android:layout_alignParentLeft="true" ?與父元素左對齊????

?????android:layout_alignParentRight="true" 與父元素右對齊????

?????還可以指定邊距等,具體詳見API ? ?? ??

5.TableLayout????

?????表格布局類似Html里面的Table。每一個TableLayout里面有表格行TableRowTableRow里面可以具體定義每一個元素,設定他的對齊方式?android:gravity=""?。????

?????每一個布局都有自己適合的方式,另外,這五個布局元素可以相互嵌套應用,做出美觀的界面。

18.如何啟用Service,如何停用Service?

Android中的服務和windows中的服務是類似的東西,服務一般沒有用戶操作界面,它運行于系統中不容易被用戶發覺,可以使用它開發如監控之類的程序。服務的開發比較簡單,如下:

第一步:繼承Service

public?class?SMSService?extends?Service?{

}

第二步:在AndroidManifest.xml文件中的<application>節點里對服務進行配置:

<service?android:name=".SMSService"?/>

?

服務不能自己運行,需要通過調用Context.startService()Context.bindService()方法啟動服務。這兩個方法都可以啟動Service,但是它們的使用場合有所不同。使用startService()方法啟用服務,調用者與服務之間沒有關連,即使調用者退出了,服務仍然運行。使用bindService()方法啟用服務,調用者與服務綁定在了一起,調用者一旦退出,服務也就終止,大有“不求同時生,必須同時死”的特點。

?

如果打算采用Context.startService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onStart()方法。如果調用startService()方法前服務已經被創建,多次調用startService()方法并不會導致多次創建服務,但會導致多次調用onStart()方法。采用startService()方法啟動的服務,只能調用Context.stopService()方法結束服務,服務結束時會調用onDestroy()方法。

?

如果打算采用Context.bindService()方法啟動服務,在服務未被創建時,系統會先調用服務的onCreate()方法,接著調用onBind()方法。這個時候調用者和服務綁定在一起,調用者退出了,系統就會先調用服務的onUnbind()方法,接著調用onDestroy()方法。如果調用bindService()方法前服務已經被綁定,多次調用bindService()方法并不會導致多次創建服務及綁定(也就是說onCreate()onBind()方法并不會被多次調用)。如果調用者希望與正在綁定的服務解除綁定,可以調用unbindService()方法,調用該方法也會導致系統調用服務的onUnbind()-->onDestroy()方法。

服務常用生命周期回調方法如下:

onCreate()?該方法在服務被創建時調用,該方法只會被調用一次,無論調用多少次startService()bindService()方法,服務也只被創建一次

onDestroy()該方法在服務被終止時調用

?

與采用Context.startService()方法啟動服務有關的生命周期方法

onStart()?只有采用Context.startService()方法啟動服務時才會回調該方法。該方法在服務開始運行時被調用。多次調用startService()方法盡管不會多次創建服務,但onStart()?方法會被多次調用

?

與采用Context.bindService()方法啟動服務有關的生命周期方法

onBind()只有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用Context.bindService()方法并不會導致該方法onBind()被多次調用。

onUnbind()只有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用

[java]?view plaincopy
  • 采用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);//解除綁定??
  • ? ? ? ?}});?????????
  • ????}??
  • }??
  • 19.ListView的優化方案


    1,如果自定義適配器,那么在getView方法中要考慮方法傳進來的參數contentView是否為null,如果為null就創建contentView并返回,如果不為null則直接使用。在這個方法中,盡可能少創建view
    2,給contentView設置tag(setTag()),傳入一個viewHolder對象,用于緩存要顯示的數據,可以達到圖像數據異步加載的效果
    3,如果listview需要顯示的item很多,就要考慮分頁加載。比如一共要顯示100條或者更多的時候,我們可以考慮先加載20條,等用戶拉到列表底部的時候,再去加載接下來的20條。

    20廣播接收者生命周期


    廣播接收器只有一個回調方法:
    void onReceive(Context curContext, Intent broadcastMsg)
    當廣播消息抵達接收器時,Android調用它的onReceive()方法并將包含消息的Intent對象傳遞給它。廣播接收器僅在它執行這個方法時處于活躍狀態。當onReceive()返回后,它即為失活狀態。
    擁有一個活躍狀態的廣播接收器的進程被保護起來而不會被殺死。但僅擁有失活狀態組件的進程則會在其它進程需要它所占有的內存的時候隨時被殺掉。
    這種方式引出了一個問題:如果響應一個廣播信息需要很長的一段時間,我們一般會將其納入一個衍生的線程中去完成,而不是在主線程內完成它,從而保證用戶交互過程的流暢。如果onReceive()衍生了一個線程并且返回,則包涵新線程在內的整個進程都被會判為失活狀態(除非進程內的其它應用程序組件仍處于活躍狀態),于是它就有可能被殺掉。這個問題的解決方法是令onReceive()啟動一個新服務,并用其完成任務,于是系統就會知道進程中仍然在處理著工作。

    21.設計模式和IoC(Inversion of Control?控制反轉)


    Android?框架魅力的源泉在于IoC,在開發Android?的過程中你會時刻感受到IoC?帶來

    的巨大方便,就拿Activity?來說,下面的函數是框架調用自動調用的:

    protected?void?onCreate(Bundle?savedInstanceState)?

    不是程序編寫者主動去調用,反而是用戶寫的代碼被框架調用,這也就反轉

    !當然IoC?本身的內涵遠遠不止這些,但是從這個例子中也可以窺視出IoC

    帶來的巨大好處。此類的例子在Android?隨處可見,例如說數據庫的管理類,

    例如說Android?SAX?Handler?的調用等。有時候,您甚至需要自己編寫簡

    單的IoC?實現,上面展示的多線程現在就是一個說明

    22.Android中的長度單位詳解

    現在這里介紹一下dp?spdp?也就是dip。這個和sp?基本類似。如果設置表示長度、高度等屬性時可以使用dp?sp。但如果設置字體,需要使用spdp?是與密度無關,sp?除了與密度無關外,還與scale?無關。如果屏幕密度為160,這時dp?sp?px?是一樣的。1dp=1sp=1px,但如果使用px?作單位,如果屏幕大小不變(假設還是3.2?寸),而屏幕密度變成了320。那么原來TextView?的寬度設成160px,在密度為320?3.2?寸屏幕里看要比在密度為160?3.2?寸屏幕上看短了一半。但如果設置成160dp?160sp?的話。系統會自動將width?屬性值設置成320px?的。也就是160?*?320?/?160。其中320?/?160?可稱為密度比例因子。

    也就是說,如果使用dp?sp,系統會根據屏幕密度的變化自動進行轉換。

    下面看一下其他單位的含義

    px:表示屏幕實際的象素。例如,320*480?的屏幕在橫向有320個象素,

    在縱向有480?個象素。

    in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54?厘米。例如,形容

    手機屏幕大小,經常說,3.2(英)寸、3.5(英)寸、4(英)寸就是指這個

    單位。這些尺寸是屏幕的對角線長度。如果手機的屏幕是3.2?英寸,表示手機

    的屏幕(可視區域)對角線長度是3.2*2.54?=?8.128?厘米。讀者可以去量

    一量自己的手機屏幕,看和實際的尺寸是否一致。 ?


    23.?4activity的啟動模式

    standard:?標準模式,一調用startActivity()方法就會產生一個新的實例。?

    singleTop:?如果已經有一個實例位于Activity棧的頂部時,就不產生新的實例,而只是調用Activity中的newInstance()方法。如果不位于棧頂,會產生一個新的實例。?

    singleTask:?會在一個新的task中產生這個實例,以后每次調用都會使用這個,不會去產生新的實例了。?

    singleInstance:?這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity實例所處的task中,只能有這個activity實例,不能有其他的實例。

    24.什么是ANR?如何避免它?


    ANRApplication?Not?Responding

    Android中,活動管理器和窗口管理器這兩個系統服務負責監視應用程序的響應。當出現下列情況時,Android就會顯示ANR對話框了:?

      用戶對應用程序的操作(輸入事件,按鍵、觸摸屏事件)5秒內無響應

      廣播接受器(BroadcastReceiver)10秒內仍未執行完畢?

      Android應用程序完全運行在一個獨立的線程中(例如main)。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發ANR。因為此時,你的應用程序已經沒有機會去響應輸入事件和意向廣播(Intent?broadcast)。?

    避免方法:Activity應該在它的關鍵生命周期方法(如 onCreate()和onResume())里盡可能少的去做創建操作,

    潛在的耗時操作。例如網絡或數據庫操作,或者高耗時的計算如改變位圖尺寸,應該在子線程里(或者異步方式)來完成。

    主線程應該為子線程提供一個Handler,以便完成時能夠提交給主線程。

    25.Android?Intent的使用


    在一個Android應用中,主要是由一些組件組成,(Activity,Service,ContentProvider,etc.)在這些組件之間的通訊中,由Intent協助完成。

    正如網上一些人解析所說,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將?Intent傳遞給調用的組件,并完成組件的調用。Intent在這里起著實現調用者與被調用者之間的解耦作用。
    Intent傳遞過程中,要找到目標消費者(另一個Activity,IntentReceiver或Service),也就是Intent的響應者,有兩種方法來匹配:
    1,顯示匹配(Explicit):?

    [java]?view plaincopy
  • public?TestB?extents?Activity??
  • {??
  • ?.........??
  • };??
  • ?public?class?Test?extends?Activity??
  • {??
  • ?????......??
  • ?????public?void?switchActivity()??
  • ?????{??
  • ????????????Intent?i?=?new?Intent(Test.this,?TestB.class);??
  • ????????????this.startActivity(i);??
  • ?????}??
  • }??


  • 代碼簡潔明了,執行了switchActivity()函數,就會馬上跳轉到名為TestB的Activity中。?

    2,隱式匹配(Implicit):
    ???
    ??隱式匹配,首先要匹配Intent的幾項值:Action,?Category,?Data/Type,Component
    如果填寫了Componet就是上例中的Test.class)這就形成了顯示匹配。所以此部分只講前幾種匹配。匹配規則為最大匹配規則,

    1,如果你填寫了Action,如果有一個程序的Manifest.xml中的某一個Activity的IntentFilter段中定義了包含了相同的Action那么這個Intent就與這個目標Action匹配,如果這個Filter段中沒有定義Type,Category,那么這個Activity就匹配了。但是如果手機中有兩個以上的程序匹配,那么就會彈出一個對話可框來提示說明。
    Action的值在Android中有很多預定義,如果你想直接轉到你自己定義的Intent接收者,你可以在接收者的IntentFilter中加入一個自定義的Action值(同時要設定Category值為"android.intent.category.DEFAULT"),在你的Intent中設定該值為Intent的Action,就直接能跳轉到你自己的Intent接收者中。因為這個Action在系統中是唯一的。
    2,data/type,你可以用Uri來做為data,比如Uri?uri?=?Uri.parse(http://www.google.com?);
    Intent?i?=?new?Intent(Intent.ACTION_VIEW,uri);手機的Intent分發過程中,會根據http://www.google.com?的scheme判斷出數據類型type
    手機的Brower則能匹配它,在Brower的Manifest.xml中的IntenFilter中首先有ACTION_VIEW?Action,也能處理http:的type,

    3,至于分類Category,一般不要去在Intent中設置它,如果你寫Intent的接收者,就在Manifest.xml的Activity的IntentFilter中包含android.category.DEFAULT,這樣所有不設置Category(Intent.addCategory(String?c);)的Intent都會與這個Category匹配。

    4,extras(附加信息),是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,比如,如果要執行“發送電子郵件”這個動作,可以將電子郵件的標題、正文等保存在extras里,傳給電子郵件發送組件。

    總結

    以上是生活随笔為你收集整理的Android面试题总结加强版(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 无码国产精品一区二区免费式直播 | 精品伦精品一区二区三区视频密桃 | 插久久 | 日韩精品在线看 | 天天综合一区 | 一区二区 亚洲 | 久久丝袜视频 | 六月婷婷在线 | av在线麻豆| 在线观看国产免费视频 | 色原网 | 91视频在线网站 | 亚洲网站av| 欧美看片 | 性www| 国产农村妇女毛片精品久久麻豆 | 国产日视频 | 四虎影视成人永久免费观看亚洲欧美 | 午夜精品久久久久久久99热黄桃 | 6080一级片 | 999视频在线 | 在线观看日本中文字幕 | 国产精品99久久久久久久 | 超碰p| 久久久久久久影院 | 欧美日韩一区二区综合 | 村姑电影在线播放免费观看 | 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 男女午夜免费视频 | 日日干夜夜艹 | 男男一级淫片免费播放 | 女人扒开屁股让男人桶 | 黄色综合 | 国产精品久久久免费视频 | 亚洲国产精品久久久久 | 日韩三级大片 | 成人黄色三级视频 | 老熟妇仑乱一区二区av | 自拍露脸高潮 | 搡老岳熟女国产熟妇 | 日本公妇乱偷中文字幕 | 边吃奶边添下面好爽 | 男人天堂网址 | 九七伦理电影 | 中文字幕永久 | 无码国产精品一区二区免费16 | 日韩久草 | 精品欧美一区二区精品久久 | 成人妇女淫片aaaa视频 | 亚洲av永久无码国产精品久久 | 亚洲欧美一区二区在线观看 | a国产| 九九啪 | 亚洲经典在线观看 | 乳罩脱了喂男人吃奶视频 | 黄色在线免费观看视频 | 3级av | 丰满人妻一区二区三区无码av | 肉色欧美久久久久久久免费看 | 91影院在线 | 米奇色| 国产精品有限公司 | 男女做激情爱呻吟口述全过程 | 国产精品亚洲一区二区无码 | 少妇又色又紧又黄又刺激免费 | 天天操妹子 | 野花视频在线观看免费 | 国产日韩精品一区 | 一区二区伊人 | 国产欧美日韩视频在线观看 | 天天操天天干天天舔 | 狼人av在线 | 免费在线观看av片 | 国产精品专区在线观看 | 青青草手机在线观看 | wwwwww在线观看 | 韩日中文字幕 | 国产精品成人国产乱 | 青青草欧美| 青青草91久久久久久久久 | 亚洲精品视频中文字幕 | 中文字幕一二三 | 久久综合色婷婷 | 自拍偷拍第3页 | 天堂网站 | 电影《两个尼姑》免费播放 | 中文在线永久免费观看 | 黑人粗进入欧美aaaaa | 激情黄色小说网站 | 一区二区高清 | 永久免费无码av网站在线观看 | 欧美成人一区二区 | 蜜臀人妻四季av一区二区不卡 | 鲁丝片一区二区三区 | 精品欧美一区二区三区成人 | 天天综合中文字幕 | 国产精品不卡 | 青青青在线视频观看 | 哪里可以免费看av |