天天看點

android AlertDialog TextView指派_Android & Java面試詳細個人總結

熱文導讀|   點選标題閱讀

網際網路寒冬下,程式員如何突圍提升自己?

讓前端和Android開發者失業的技術:Flutter Web初體驗

程式員吐槽:在阿裡工作帶來光環,在京東卻帶來負面影響!

轉自:https://www.jianshu.com/p/e4ddc1686220

Java部分

一、八種資料類型以及他們的包裝類

android AlertDialog TextView指派_Android & Java面試詳細個人總結

二、abstract與interface的差別(抽象類和接口)

1、關鍵字:抽象類 
           

三、重寫和重載的差別

四、return和break和continue的差別

1.break語句的使用場合主要是switch語句和循環結構。

在循環結構中使用break語句,如果執行了break語句,那麼就退出循環,接着執行循環結構下面的第一條語句。

如果在多重嵌套循環中使用break語句,當執行break語句的時候,退出的是它所在的循環結構,對外層循環沒有任何影響。如果循環結構裡有switch語句,并且在switch語句中使用了break語句,當執行switch語句中的break語句時,僅退出switch語句,不會退出外面的循環結構

android AlertDialog TextView指派_Android & Java面試詳細個人總結

break效果圖

2.continue:終止目前的一次循環過程,但是不跳出循環,而是繼續往下執行下一次循環。

android AlertDialog TextView指派_Android & Java面試詳細個人總結

continue執行個體

3.return:如果在程式中遇到return語句,那麼代碼就退出該函數的執行,傳回到函數的調用處

android AlertDialog TextView指派_Android & Java面試詳細個人總結

return效果圖

五、面向對象和面向過程

面向過程:就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實作,使用的時候一個一個依次調用就可以了

面向對象:是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描叙某個事物在整個解決問題的步驟中的行為

面向對象三個特征:

封裝,繼承,多态封裝:封裝:把客觀事物封裝成抽象的類,并且類可以把自己的資料和方法隻讓可信的類或者對象操作,對不可信的進行資訊隐藏。get()/set()方法繼承:子對象可以繼承父對象的屬性和行為,亦即父對象擁有的屬性和行為,其子對象也就擁有了這些屬性和行為這個很好了解,解析資料的時候,大家應該都有一個BaseBean,然後去繼承他,不用重複寫代碼,利于代碼的複用性多态:多态是指父對象中的同一個行為能在其多個子對象中有不同的表現。也就是說子對象可以使用重寫父對象中的行為,使其擁有不同于父對象和其它子對象的表現,這就是overriding(重寫)

多态存在的三個必要條件:

一、要有繼承;二、要有重寫;三、父類引用指向子類對象

多态的例子不勝枚舉。比方說按下 F1 鍵這個動作,如果目前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;如果目前在 Word 下彈出的就是 Word 幫助;在 Windows 下彈出的就是 Windows 幫助和支援。同一個事件發生在不同的對象上會産生不同的結果。

六、equals()和==的差別

== 比較的是變量(棧)記憶體中存放的對象的(堆)記憶體位址,用來判斷兩個對象的位址是否相同,即是否是指相同一個對象。比較的是真正意義上的指針操作。

equals用來比較的是兩個對象的内容是否相等,由于所有的類都是繼承自java.lang.Object類的,是以适用于所有對象,如果沒有對該方法進行覆寫的話,調用的仍然是Object類中的方法,

而Object中的equals方法傳回的卻是==的判斷。

七、大路邊的幾個設計模式

工廠模式:

android中的demo展現:線程池

https://blog.csdn.net/nugongahou110/article/details/50425823這個連結,very good,對我來說,非常好了解,what is 工廠模式???我是在這兒學的,原諒我這個菜鳥吧,不會總結.最好把demo敲一遍,加深記憶,很好了解,雖然看也是可以看懂的.

建造者模式:https://blog.csdn.net/nugongahou110/article/details/50395698android中,大概build()結尾的都是吧.比如:Imagrloder,AlertDialog.Builder等等.

裝飾者模式:https://blog.csdn.net/nugongahou110/article/details/50413668

單例模式:餓漢式:

//隻有内部類可以為static。
           

懶漢式:

/***
     * 一種常用的形式
     */
           

雙重鎖定:(這個一般在實際應用中用的比較多,以上,了解即可)

//将同步内容下方到if内部,提高了執行的效率,不必每次擷取對象時都進行同步,隻有第一次才同步,建立了以後就沒必要了。 
           

九、String,StringBuffer,StringBuilder

android AlertDialog TextView指派_Android & Java面試詳細個人總結

關系圖

1、運作速度:StringBuilder > StringBuffer > String

原因: String為字元串常量,而StringBuilder和StringBuffer均為字元串變量,即String對象一旦建立之後該對象是不可更改的,每一次新的指派,都會重新建立對象,垃圾回收機制回收舊的對象,但後兩者的對象是變量,對變量進行操作就是直接對該對象進行更改,而不進行建立和回收的操作,是以速度要比String快很多。

2、線程安全:StringBuilder是線程不安全的,而StringBuffer是線程安全的 原因:StringBuffer中很多方法可以帶有synchronized關鍵字,是以可以保證線程是安全的,但StringBuilder的方法則沒有該關鍵字,是以不能保證線程安全,有可能會出現一些錯誤的操作。是以如果要進行的操作是多線程的,那麼就要使用StringBuffer,但是在單線程的情況下,還是建議使用速度比較快的StringBuilder。

十、正規表達式

Pattern 類:pattern 對象是一個正規表達式的編譯表示。Pattern 類沒有公共構造方法。要建立一個 Pattern 對象,你必須首先調用其公共靜态編譯方法,它傳回一個 Pattern 對象。該方法接受一個正規表達式作為它的第一個參數。

Matcher 類:Matcher 對象是對輸入字元串進行解釋和比對操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher 對象。PatternSyntaxException:PatternSyntaxException 是一個非強制異常類,它表示一個正規表達式模式中的文法錯誤。

十一、集合

android AlertDialog TextView指派_Android & Java面試詳細個人總結

整體關系圖

十二、I/O

android AlertDialog TextView指派_Android & Java面試詳細個人總結

I/O

十三、線程

android AlertDialog TextView指派_Android & Java面試詳細個人總結

線程的生命周期

建立狀态:

使用 new 關鍵字和 Thread 類或其子類建立一個線程對象後,該線程對象就處于建立狀态。它保持這個狀态直到程式 start() 這個線程。

就緒狀态:當線程對象調用了start()方法之後,該線程就進入就緒狀态。就緒狀态的線程處于就緒隊列中,要等待JVM裡線程排程器的排程。

運作狀态:如果就緒狀态的線程擷取 CPU 資源,就可以執行 run(),此時線程便處于運作狀态。處于運作狀态的線程最為複雜,它可以變為阻塞狀态、就緒狀态和死亡狀态。

阻塞狀态:如果一個線程執行了sleep(睡眠)、suspend(挂起)等方法,失去所占用資源之後,該線程就從運作狀态進入阻塞狀态。在睡眠時間已到或獲得裝置資源後可以重新進入就緒狀态。可以分為三種:等待阻塞:運作狀态中的線程執行 wait() 方法,使線程進入到等待阻塞狀态。同步阻塞:線程在擷取 synchronized 同步鎖失敗(因為同步鎖被其他線程占用)。其他阻塞:通過調用線程的 sleep() 或 join() 發出了 I/O 請求時,線程就會進入到阻塞狀态。當sleep() 狀态逾時,join() 等待線程終止或逾時,或者 I/O 處理完畢,線程重新轉入就緒狀态。

死亡狀态:一個運作狀态的線程完成任務或者其他終止條件發生時,該線程就切換到終止狀态。Java 提供了三種建立線程的方法:   通過實作 Runnable 接口;      通過繼承 Thread 類本身;    通過 Callable 和 Future 建立線程。

程序和線程的差別:程序是應用程式,線程是一條執行路徑程序有獨立的記憶體空間,崩潰不會影響其他程式,線程沒有獨立的空間,多個線程在同一個程序的空間,可能會影響其他線程一個程序中,至少有一個線程

run和start的差別

run

沒有開辟新的棧空間,沒有新線程,都是主線程在執行

start

開辟了新的棧空間,在新的棧空間啟動run()方法

sleep和pield的差別:

sleep

       線程進入被阻塞的狀态

yeild

       線程轉入暫停執行的狀态

打斷線程的終止方式1、用标記,當終止線程時,會執行完run方法2、stop()方法,不建議使用,會執行不到特定的代碼3、interrupt(),隻能中斷正在休眠的線程,通過抛異常的方法中斷線程的終止。InputStream inputStream=System.in;int m=inputStream.read();myThread2.interrupt();//通過外界輸入打斷

十四、資料庫

"com.mysql.jdbc.Driver");
           

十五、網絡

一、HttpClient:HttpClient 是Apache的一個三方網絡架構,網絡請求做了完善的封裝,api衆多,用起來比較友善,開發快。實作比較穩定,bug比較少,但是正式由于其api衆多,是我們很難再不破壞相容性的情況下對其進行擴充。是以,Android團隊對提升和優化httpclient積極性并不高。android5.0被廢棄,6.0逐漸删除。

二、HttpURLConnectionHttpURLConnection是一個多用途、輕量級的http用戶端。它對網絡請求的封裝沒有HttpClient徹底,api比較簡單,用起來沒有那麼友善。但是正是由于此,使得我們能更容易的擴充和優化的HttpURLConnection。不過,再android2.2之前一直存在着一些令人煩的bug,比如一個人可讀的inputstream調用它的close方法的時候,會使得連接配接池實效,通常的做法就是禁用連接配接池。是以,在android2.2之前建議使用穩定的HttpClient,android2.2之後使用更容易擴充和優化的HttpURLConnection。

三、okhttp支援Android 2.3及其以上版本;支援Java JDK 1.7以上版本;okhttp是專注于提升網絡連接配接效率的http用戶端。1、它能實作同一ip和端口的請求重用一個socket,這種方式能大大降低網絡連接配接的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。2、okhttp 對http和https都有良好的支援。3、okhttp 不用擔心android版本變換的困擾。4、成熟的網絡請求解決方案,比HttpURLConnection更好用。4、缺點,okhttp請求網絡切換回來是線上程裡面的,不是在主線程,不能直接重新整理UI,需要我們手動處理。封裝比較麻煩。

十六、json和html

XML的三種原生解析方式

DOM,SAX,PULL

DOM:

記憶體消耗大 但是便于周遊.打開文檔,将其轉化為節點樹,然後在其用循環的方式,周遊節點,一一查找.

SAX:

速度快,戰記憶體少.但是檔案結構資訊會丢失,采用的是流的處理方式.從起始标簽開始一一往下逐個查找.起始标簽與結尾标簽作為标記來将一組資料存入一個集合中,想水流一樣一直到最尾,然後最後傳回集合,集合中就存下了所有的資料(這也應該就是所謂的流處理方式吧).

PULL:

是Android内置,推薦的一種,相對來說有點類似SAX,也是從上往下,但是它還是已文檔開始與結尾為條件,在其中間進行查找處理,然後分為不同标簽開始逐一查找.

JSON的三種解析方式原始解析:JSONObjectgoogle的

Gson:

    Gson gson = new Gson();       String str = gson.toJson(obj);阿裡的

Fastjson:

    JSON.parseObject(result,MenuBean.class);

Android部分

1、MVC、MVP、MVVM

推薦連結:http://blog.csdn.net/hudan2714/article/details/50990359

MVC

模型(model)-視圖(view)-控制器(controller)

android AlertDialog TextView指派_Android & Java面試詳細個人總結

MVC

資料關系:

View 接受使用者互動請求View 将請求轉交給ControllerController 操作Model進行資料更新資料更新之後,Model通知View更新資料變化View 更新變化資料

使用:MVC中的View是可以直接通路Model的!進而,View裡會包含Model資訊,不可避免的還要包括一些業務邏輯。在MVC模型裡,更關注的Model的不變,而同時有多個對Model的不同顯示,及View。是以,在MVC模型裡,Model不依賴于View,但是 View是依賴于Model的。不僅如此,因為有一些業務邏輯在View裡實作了,導緻要更改View也是比較困難的,至少那些業務邏輯是無法重用的。

MVP

Model提供資料,View負責顯示,Controller/Presenter負責邏輯的處理

android AlertDialog TextView指派_Android & Java面試詳細個人總結

MVP

資料關系:View 接收使用者互動請求View 将請求轉交給 PresenterPresenter 操作Model進行資料更新Model 通知Presenter資料發生變化Presenter 更新View資料

使用:MVP的實作會根據View的實作而有一些不同,一部分傾向于在View中放置簡單的邏輯,在Presenter放置複雜的邏輯;另一部分傾向于在presenter中放置全部的邏輯。這兩種分别被稱為:Passive View和Superivising Controller。

MVVM

Model-View-ViewModel

android AlertDialog TextView指派_Android & Java面試詳細個人總結

MVVM

資料關系:View 接收使用者互動請求View 将請求轉交給ViewModelViewModel 操作Model資料更新Model 更新完資料,通知ViewModel資料發生變化ViewModel 更新View資料

使用:可以相容你當下使用的 MVC/MVP 架構。增加你的應用的可測試性。配合一個綁定機制效果最好。

2、四大元件

Activity、BroadcastReceiver、Service、ContentProvider

Activity:(活動)

生命周期:

onCreate():

每個活動都會重寫這份方法,他會在活動第一次建立的時間被調用,可完成初始化操作,加載布局,綁定事件。

onStart():

不可見變成可見的時候調用。

onResum():

這個方法是在活動準備好和使用者進行互動的時候調用。

onPause():

這個方法是系統準備去啟動或者回複另一個活動的時候調用,使用者不可見,這裡需要儲存一些關鍵資料。

onStop():

這個方法在活動完全不可見的時間調用,被下一個activity覆寫。和onPause()的差別就是,若啟動的新活動是個對話框,onPause會執行,onStop不會執行.

onDestory():

這個在活動被銷毀錢調用,之後變成銷毀狀态。

onRestart():

這個方法在活動停止狀态變成運作狀态之前調用.onRestart->inStart->onResum啟動模式:

standard:

預設啟動方式,每次啟動都會建立一個新的活動。A啟動A,啟動一次建立一個。

singleTop:

在啟動界面時,如果發現該活動位于棧頂,則不會建立新的活動,直接使用它。A啟動A,隻會建立一個A。當A不位于棧頂時,啟動A,則會建立新的A。

singleTask:

每次啟動活動時,系統首次會在棧中檢查是否存在該活動的執行個體,如果發現已存在,則直接使用該執行個體,并把這個活動之上的所有活動統統出棧,如果發現沒有,則建立新的活動執行個體。A啟動B,B在啟動A,B銷毀(onDestory()),A重新位于棧頂(onRestart())。

singleInstance:

啟動一個新的棧來管理活動。程序間的通訊,别的程式和我們的程式可以共享這個活動。

BroadcastReceiver:(廣播)

注冊廣播的兩種方式:

靜态注冊:

我們需要生成一個類去繼承BroadcastReceiver,并複寫onReceiver()方法,并且在清單檔案中注冊Receiver,在标簽中定義action唯一辨別屬性。

動态注冊:

建立一個類繼承BroadcastReceiver,重寫onReceiver()方法.然後再Activity當中複寫onStart()和onStop()方法,在onStart()當中,我們需要構造一個IntentFilter對象,并執行這個對象的addAction方法,參數為action辨別符,再執行registerReceiver()方法,參數為廣播接收器對象和IntentFilter對象。在onStop()中執行unregisterReceiver()方法,參數為廣播接收器對象。

發送廣播:

無序廣播:

sendBroadcast()

有序廣播:

sendOrderedBroadcast()

本地廣播:

LocalBroadcastManager來管理廣播注意:1.廣播接收者的生命周期是非常短暫的,在接收到廣播的時候建立,onReceive()方法結束之後銷毀2.廣播接收者中不要做一些耗時的工作,否則會彈出Application No Response錯誤對話框3.最好也不要在廣播接收者中建立子線程做耗時的工作,因為廣播接收者被銷毀後程序就成為了空程序,很容易被系統殺掉4.耗時的較長的工作最好放在服務中完成

ContentProvider:(内容提供器)

跨程式共享資料功能通路其他程式:ContentResolver,增删改查,讀取聯系人功能建立自己的内容提供器供其他程式使用。繼承ContentProvider清單檔案必須注冊才能使用

Service(服務)

清單檔案必須注冊才能使用

1.Context.startService()

onCreate() -> onStartCommand() -> onDestroy()onCreate()該方法在服務被建立時調用,該方法隻會被調用一次onStart() 隻有采用Context.startService()方法啟動服務時才會回調該方法。該方法在服務開始運作時被調用。多次調用startService()方法盡管不會多次建立服務,但onStartCommand () 方法會被多次調用。onDestroy()該方法在服務被終止時調用。

2、Context.bindService()

onCreate() -> onBind() -> onUnbind() -> onDestroy()onCreate()該方法在服務被建立時調用,該方法隻會被調用一次onBind()隻有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務綁定時被調用,當調用者與服務已經綁定,多次調用Context.bindService()方法,onBind()方法并不會導緻被多次調用。onUnbind()隻有采用Context.bindService()方法啟動服務時才會回調該方法。該方法在調用者與服務解除綁定時被調用。onDestroy()該方法在服務被終止時調用。注意:如果先采用startService()方法啟動服務,又調用bindService()方法綁定到服務,必須同時調用stopService()和unbindSetvice(),服務才能停掉。Service和IntentService的差別是什麼?1.Service在預設情況下将會運作在主線程當中2.IntentService在收到請求後,将會執行onHandlerIntent方法,該方法運作在workerThread當中3.Service和IntentService的第二項差別是當Intent收到多次請求時,這些請求将會在消息隊列當中排隊,依次由onHandlerIntent處理

3、Android的資料存儲方式--持久化技術

檔案存儲、SharedPreference存儲、資料庫存儲

檔案存儲存儲簡單的文本或者二進制資料,流的方式存儲openFileOutput()openFileInput()

SharedPreference鍵值對的方式存儲三種方法擷取SharedPreference對象1.Context類中的getSharedPreference()方法2.Activity類中的getPreference()方法3.PreferenceManager類中的getSharedPreference()方法

資料庫存儲複雜的資料SQLiteSQLiteOpenHelper

4、異步消息處理機制--Message、Handler、MessageQueue、Lopper

1.在主線程,建立handler對象.2.在子線程,資料封裝在Message對象中,handler執行發送的動作(發送到handler所在的主線程)3.在主線程,message對象發送到messagequeue()中,looper調用loop()方法不斷監聽消息隊列,如果有資料,則取出,調用handler和dispatchmessage()方法将消息分發帶指定handler中.4.在主線程,dispatchmessage()方法中,将接收到的message對象交給handlemessage()方法處理.5.重寫handlermeaage()方法,做出實際的動作處理.

5、XML和JSON格式資料解析

XMLPullSaxDomJSONFastjson(阿裡)Gson(谷歌)jackson(SpringMVC自帶)

6、Intent和PendingIntent的差別

Intent:立即執行某個動作PendingIntent:在某個合适的時機去執行某個動作,延遲執行的intent

7、三種動畫

Drawable Animation(幀動畫)主要涉及類:AnimationDrawable1、通過 XML 檔案實作

<?xml  version="1.0" encoding="utf-8"?>
           

java代碼開啟:

2、隻通過 Java 代碼實作

new AnimationDrawable();
           

View Animation(補間動畫)使用詳解  補間動畫,主要是向View對象設定動畫效果,包括AlphaAnimation 、RotateAnimation 、ScaleAnimation 、TranslateAnimation 這4種效果,對應的xml标簽分别是alpha、rotate、scale、translate。通過為動畫設定初始和終止對應的值,根據插值器和duration計算動畫過程中間相應的值實作平滑運動,即設定初始和終止狀态,插值器來計算填補初始狀态到終止狀态間的動畫。使用:1、設定相應動畫效果的起點值、終點值、duration(時長)、Interpolator(加速度)。(注:RotateAnimation還需要設定旋轉中心坐标值)2.Interpolator:插值器,随時間流逝動畫路程所應走過的百分比。比如,若設定為LinearInterpolator(勻速),時間過一半則插值器的值是0.5;若設定的是DecelerateInterpolator(加速插值器),時間過一半則插值器的值大于0.5.實作的方式:(例子,隻舉例子AlphaAnimation .其它三個,一模一樣)1、通過XML定義

<alpha xmlns:android="http://schemas.android.com/apk/res/android"android:fromAlpha="0"android:toAlpha="1"android:duration="2000">
           

Java代碼調用:

null;
           

2、隻使用Java代碼調用

//在代碼中定義 動畫執行個體對象
           

roperty Animation(屬性動畫)  咳咳.這個動畫就太強大了,哀家實力有限,又要放大招了,那就是看别人的,哈哈哈哈~~~  屬性動畫可以對任何對象的屬性做動畫而不僅僅是View,甚至可以沒有對象。除了作用對象進行擴充外,屬性動畫的效果也加強了,不僅能實作View動畫的4中效果,還能實作其它多種效果,這些效果都是通過ValuAnimator或ObjectAnimator、AnimatorSet等來實作的。  ValueAnimator :值動畫執行類,常配合AnimatorUpdateListener使用。  ObjectAnimator :對象動畫執行類。繼承自ValueAnimator,要指定一個對象及該對象的一個屬性,當屬性值計算完成時自動設定為該對象的相應屬性,不需要設定監聽,底層自動完成,一般會用ObjectAnimator來改變某一對象的某一屬性.  實作的方式:  1、xml

<?xml  version="1.0" encoding="utf-8"?>
           

java代碼調用:

null;
           

2、Java代碼

"scaleX",
           

8、Design的使用

Design控件:Toolbar、CoordinatorLayout、AppBarLayout、CollapsingToolbarLayout、TabLayout、TextInputLayout、NavigationView、FloatingActionButton、Snackbar。推薦學習連結:https://blog.csdn.net/lavor_zl/article/details/51295364

9、Fragment的生命周期

onAttach()

    fragment已經關聯到activity

onCreate()

  系統建立fragment的時候回調他,在他裡面執行個體化一些變量

onCreateView()

 第一次使用的時候 fragment會在這上面畫一個layout出來          onActivityCreated()  當Activity中的onCreate方法執行完後調用。

onStart()

 和activity一緻 啟動, Fragement 啟動時回調, 此時Fragement可見;

onResume()

   和activity一緻  在activity中運作是可見的

onPause()

  和activity一緻  其他的activity獲得焦點,這個仍然可見

onStop()

和activity一緻fragment不可見的,

onDestroyView()

    Fragment中的布局被移除時調用。

onDestroy()

  銷毀fragment對象

onDetach()

    Fragment和Activity解除關聯的時候調用。

10、清單檔案裡面的内容包括哪些?

應用程式的包名,該包名作為該應用的唯一辨別。應用包含的元件,如Activity,Service,Broadcastreceiver和ContentProvider.應用程式使用系統所需的權限聲明。其他程式通路該程式所需的權限聲明。

11、如何相容不同的版本

在使用高于minSdkVersion API level的方法需要:用

@TargeApi($API_LEVEL)

使可以編譯通過, 不建議使用

@SuppressLint("NewApi")

;運作時判斷API level; 僅在足夠高,有此方法的API level系統中,調用此方法;保證功能完整性,保證低API版本通過其他方法提供功能實作。

12、如何配置第三方的sdk

1、依賴注入2、導入moudle

13、fragment的切換方式

如果用

replace()

就會每次都初始化Fragment正确的切換方式是

add()

,切換時

hide()

add()

另一個Fragment;再次切換時,隻需

hide()

目前,

show()

另一個。這樣就能做到多個Fragment切換不重新執行個體化

14、點選事件的分發機制

首先會手勢在螢幕上傳遞事件,會先走到最外層的布局的

dispatchTouchEvent

--》然後通過

onInterceptTouchEvent

的傳回值,判斷是否攔截,如果攔截,就不走子視圖當中的事件響應了,而執行自己的

onTouchEvent

方法,如果不攔截,就會走子視圖

dispatchTouchEvent

--

onTouch

--

onTouchEvent

方法,如果

onTouchEvent

的傳回值為true,那麼這個事件此子視圖負責消費,否則就會回傳到上一視圖的

onTouchEvent

當中來處理,如果上一視圖傳回為

true

,則其消費,否則事件回收不做處理。在

onTouchListener

當中的

onTouch

方法裡,判斷傳回值,然後決定是否執行

onTouchEvent

方法,然後在onTouchEvent方法的ACTION_DOWN操作中通過判斷時間和标志位,決定是否執行

onLongClickListener

當中

onLongClick

操作,然後在

onLongClick

方法中通過判斷傳回值,來确定

onClickListener

onClick

方法是否會執行,如果傳回

false

,都能執行,如果傳回

true

onClick

不執行。

15、消息推送原理以及實作過程

用戶端和伺服器一直保持長連結推薦連結:https://www.jianshu.com/p/da4529fd4675

16、map集合的存儲原理

通過鍵值對的方式進行存取資料的

17、自定義View的隻要重寫的方法名有哪些?

有三個構造方法(一個參數、兩個參數、三個參數),其中兩個參數的構造方法必須有。onDraw()方法必須有,是用來繪制View圖像的如果要改變View 的大小,需要重寫onMeasure()方法。如果要改變View在父控件中的位置,需要重寫onLayout()方法

18、Alipay的支付流程?

android AlertDialog TextView指派_Android &amp;amp; Java面試詳細個人總結

支付寶支付流程

19、怎麼讓viewpager不滑動?

大緻就是重寫ViewPager,覆寫ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,這兩個方法的傳回值都是boolean類型的,隻需要将傳回值改為false,那麼ViewPager就不會消耗掉手指滑動的事件了,轉而傳遞給上層View去處理或者該事件就直接終止了。

20、如何避免記憶體洩露(造成記憶體洩漏的原因)?

資源對象沒關閉造成的記憶體洩漏,如查詢資料庫後沒有關閉遊标cursor構造Adapter時,沒有使用 convertView 重用Bitmap對象不在使用時調用recycle()釋放記憶體

21、下拉重新整理的實作?

1.原生的SwipeRefreshLayout設定監聽,寫onRefresh()方法,然後設定setrefreshing(true),重新整理完之後設定成false.2.第三方架構. PullToRefresh.在布局檔案中添加PullToRefresh控件,比如PullToRefreshListView; 在Activity中,設定監聽器OnRefreshListener以響應使用者下拉操作; 在監聽器的onRefresh()方法中執行資料重新整理操作,可以通過AsyncTask來實作; 在AsyncTask中擷取到資料後,記得調用onRefreshComplete()方法通知PullToRefresh控件資料已擷取完畢,可以結束重新整理操作。

22、側滑菜單的實作?(抽屜效果)

1.DrawerLayout.第一個控件是主題内容,第二個控件是側滑菜單内容.與toolbar連用,使用開關.ActionBarDraweerTohhle.2.SlidingPaneLayout第一個控件為左側側滑菜單,第二個為主題内容Toolbar和SlidingPaneLayout不能夠直接互相配合使用,要通過actionbar和slidingpaneLayout的監聽事件才能關聯起來

23、java虛拟機jvm和android虛拟機Dalvik的差別?

java虛拟機:java虛拟機運作的是java位元組碼。(java類會被編譯成一個或多個位元組碼.class檔案,打包到.jar檔案中,java虛拟機從相應的.class檔案和.jar檔案中擷取相應的位元組碼)android虛拟機:Dalvik運作的是自定義的.dex位元組碼格式。(java類被編譯成.class檔案後,會通過一個dx工具将所有的.class檔案轉換成一個.dex檔案,然後dalvik虛拟機會從其中讀取指令和資料)

24、Java當中的加密解密技術?

1、md5加密,該加密算法是單向加密,即加密的資料不能再通過解密還原。保證資料的完整性.相關類包含在java.security.MessageDigest包中。2、DES加密,該加密算法是可逆的,解密方可以通過與加密方約定的密鑰匙進行解密。相關類包含在javax.crypto.*包中。3、base64編碼,是用于傳輸8bit位元組代碼最常用的編碼方式。相關類在sun.misc.BASE64Decoder 和sun.misc.BASE64Encoder 中。4、URLEncoder編碼,是一種字元編碼,保證被傳送的參數由遵循規範的文本組成。相關類在java.net.URLEncoder包中。5.RSA. 公鑰加密,私鑰加密.互為加解密,自己不可以解密非對稱加密6. Sign:摘要算法+不對稱加密算法保證資料的安全性,用對方的公鑰加密,發送成功後,用對方的私鑰解密

25、螢幕适配的方法

android AlertDialog TextView指派_Android &amp;amp; Java面試詳細個人總結

螢幕适配

推薦文章:https://blog.csdn.net/wangwangli6/article/details/63258270/

26、圖檔的三級緩存

記憶體緩存,優先加載,速度最快本地緩存,次優先加載,速度快網絡加載,不優先加載,速度慢,浪費流量

原理:

android AlertDialog TextView指派_Android &amp;amp; Java面試詳細個人總結

圖檔緩存流程

推薦連結:https://www.jianshu.com/p/2cd59a79ed4a

27、适配全面屏

1、App AndroidManifest的Application标簽下面增加下面一段代碼:

2、更換部分被拉伸的圖檔資源檔案(相對布局采用XML的方式,或者.9圖的解決方案)3、布局檔案的優化建議(使用百分比布局)

28、AIDL的使用

全名:Android Interface Definition Language作用:為了實作程序間通信.   這個對我來說,用的很少,但是面試的時候會被問到,主要是實作了程序間的通信問題,一般一項目,一個程序,除非業務邏輯比較多,運作記憶體不夠用的情況下,會使用AIDL.總體來說,主要是通過,定義接口的形式來實作,用戶端服務端的資料互動,下面的連結,跟着敲一遍,基本上就明白啥事了.推薦位址:https://github.com/leavesC/AIDLSamples

29、視訊的相關内容

1、使用第三方庫ijkPlayer。github位址:https://github.com/bilibili/ijkplayer,這是一個解碼器,配合surfaceView可以播放視訊,然後界面上的進度條,暫停,開始,聲音等等功能,還是需要自己的去寫的。

2、我沒做過視訊的項目,了解不是很深。推薦一個比較好的第三方庫,https://github.com/jiajunhui/PlayerBase,這個視訊做的挺好的,功能很齊全。

更多學習和讨論,歡迎加入我們的知識星球,這裡有1000+小夥伴,讓你的學習不寂寞~·

看完本文有收獲?請轉發分享給更多人

我們的知識星球第三期開期了,已達到1100人了,能連續做三期已很不容易了,有很多老使用者續期,目前續期率達到50%,說明了大家對我們的知識星球還是很認可的,歡迎大家加入盡早我們的知識星球,更多星球資訊參見:

歡迎加入Java和Android架構社群

如何進階成為Java的Android版和架構師?

說兩件事

android AlertDialog TextView指派_Android &amp;amp; Java面試詳細個人總結

微信掃描或者點選上方二維碼領取的Android \ Python的\ AI \的Java等進階進階資源

更多學習資料點選下面的

android AlertDialog TextView指派_Android &amp;amp; Java面試詳細個人總結

謝謝老闆,點個好看↓

繼續閱讀