【補充版】Android開發中,有哪些讓你覺得相見恨晚的方法、類或接口?(一)

2021-02-14 架構師必備

 1、Throwable接口中的getStackTrace()方法(或者Thread類的getStackTrace()方法),根據這個方法可以得到函數的逐層調用地址,其返回值為StackTraceElement[];


2、StackTraceElement類,其中四個方法getClassName(),getFileName(),getLineNumber(),getMethodName()在調試程序列印Log時非常有用;

3、UncaughtExceptionHandler接口,再好的代碼異常難免,利用此接口可以對未捕獲的異常善後;
使用參見:Android使用UncaughtExceptionHandler捕獲全局異常

4、Resources類中的getIdentifier(name, defType, defPackage)方法,根據資源名稱獲取其ID,做UI時經常用到;

5、View中的isShown()方法,以前都是用view.getVisibility() == View.VISIBLE來判斷的(╯□╰);(謝評論提醒,這裡面其實有一個坑:【android】view.isShown ()的用法)

6、Arrays類中的一系列關於數組操作的工具方法:binarySearch(),asList(),equals(),sort(),toString(),copyOfRange()等;
Collections類中的一系列關於集合操作的工具方法:sort(),reverse()等;

7、android.text.format.Formatter類中formatFileSize(Context, long)方法,用來格式化文件Size(B → KB → MB → GB);

8、android.media.ThumbnailUtils類,用來獲取媒體(圖片、視頻)縮略圖;

9、String類中的format(String, Object...)方法,用來格式化strings.xml中的字符串(多謝 @droider An 提示:Context類中getString(int, Object... )方法用起來更加方便);

10、View類中的三個方法:callOnClick()performClick()performLongClick(),用於觸發View的點擊事件;

11、TextUtils類中的isEmpty(CharSequence)方法,判斷字符串是否為null或"";

12、TextView類中的append(CharSequence)方法,添加文本。一些特殊文本直接用+連接會變成String;

13、View類中的getDrawingCache()等一系列方法,目前只知道可以用來截圖;

14、DecimalFormat類,用於字串格式化包括指定位數、百分數、科學計數法等;

15、System類中的arraycopy(src, srcPos, dest, destPos, length)方法,用來copy數組;

16、Fragment類中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()時貌似Fragment的其它生命周期方法都不會被調用,太坑爹!

17、Activity類中的onWindowFocusChanged(boolean)onNewIntent(intent)等回調方法;

18、View類中的getLocationInWindow(int[])方法和getLocationOnScreen(int[])方法,獲取View在窗口/屏幕中的位置;

19、TextView類中的setTransformationMethod(TransformationMethod)方法,可用來實現「顯示密碼」功能;

20、TextWatcher接口,用來監聽文本輸入框內容的改變,可用來實現一系列具有特殊功能的文本輸入框;

21、View類中的setSelected(boolean)方法結合android:state_selected=""用來實現圖片選中效果;

22、Surface設置透明:SurfaceView.setZOrderOnTop(true);
SurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
但是會擋住其它控制項;

23、ListView或GridView類中的setFastScrollEnabled(boolean)方法,用來設置快速滾動滑塊是否可見,當然前提是item夠多;

24、PageTransformer接口,用來自定義ViewPager頁面切換動畫,用setPageTransformer(boolean, PageTransformer)方法來進行設置;

25、apache提供的一系列jar包:commons-lang.jarcommons-collections.jarcommons-beanutils.jar等,裡面很多方法可能是你曾經用幾十幾百行代碼實現過的,但是執行效率或許要差很多,比如:ArrayUtils,StringUtils……;

26、AndroidTestCase類,Android單元測試,在AndroidStudio中使用非常方便;

27、TextView類的setKeyListener(KeyListener)方法;
其中DigitsKeyListener類,使用getInstance(String accepted)方法即可指定EditText可輸入字符集;

28、ActivityLifecycleCallbacks接口,用於在Application類中監聽各Activity的狀態變化;

29、Context類中的createPackageContext(packageName, flags)方法,可用來獲取指定包名應用程式的Context對象。

首先呼應題目,Log.wtf()

Part 1:

Activity.startActivities() 常用於在應用程式中間啟動其他的Activity。

TextUtils.isEmpty() 簡單的工具類,用於檢測是否為空。

Html.fromHtml() 用於生成一個Html,參數可以是一個字符串.個人認為它不是很快,所以我不怎麼經常去用.(我說不經常用它是為了重點突出這句話:請多手動構建 Spannable 來替換 Html.fromHtml),但是它對渲染從 web 上獲取的文字還是很不錯的。

TextView.setError() 在驗證用戶輸入的時候很棒。

Build.VERSION_CODES 這個標明了當前的版本號,在處理兼容性問題的時候經常會用到.點進去可以看到各個版本的不同特性。

Log.getStackTraceString() 方便的日誌類工具,方法Log.v()、Log.d()、Log.i()、Log.w()和Log.e()都是將信息列印到LogCat中,有時候需要將出錯的信息插入到資料庫或一個自定義的日誌文件中,那麼這種情況就需要將出錯的信息以字符串的形式返回來,也就是使用static String getStackTraceString(Throwable tr)方法的時候。

LayoutInflater.from() 顧名思義,用於Inflate一個layout,參數是layout的id.這個經常寫Adapter的人會用的比較多。

ViewConfiguration.getScaledTouchSlop() 使用 ViewConfiguration 中提供的值以保證所有觸摸的交互都是統一的。這個方法獲取的值表示:用戶的手滑動這個距離後,才判定為正在進行滑動.當然這個值也可以自己來決定.但是為了一致性,還是使用標準的值較好。

PhoneNumberUtils.convertKeypadLettersToDigits 顧名思義.將字母轉換為數字,類似於T9輸入法,

Context.getCacheDir() 獲取緩存數據文件夾的路徑,很簡單但是知道的人不多,這個路徑通常在SD卡上(這裡的SD卡指的是廣義上的SD卡,包括外部存儲和內部存儲)Adnroid/data/您的應用程式包名/cache/  下面.測試的時候,可以去這裡面看是否緩存成功.緩存在這裡的好處是:不用自己再去手動創建文件夾,不用擔心用戶把自己創建的文件夾刪掉,在應用程式卸載的時候,這裡會被清空,使用第三方的清理工具的時候,這裡也會被清空。

ArgbEvaluator 用於處理顏色的漸變。就像 Chris Banes 說的一樣,這個類會進行很多自動裝箱的操作,所以最好還是去掉它的邏輯自己去實現它。這個沒用過,不明其所以然,回頭再補充.

ContextThemeWrapper 方便在運行的時候修改主題。

Space space是Android 4.0中新增的一個控制項,它實際上可以用來分隔不同的控制項,其中形成一個空白的區域.這是一個輕量級的視圖組件,它可以跳過Draw,對於需要佔位符的任何場景來說都是很棒的。

ValueAnimator.reverse() 這個方法可以很順利地取消正在運行的動畫。


----
Part 2:

DateUtils.formatDateTime() 用來進行區域格式化工作,輸出格式化和本地化的時間或者日期。

AlarmManager.setInexactRepeating 通過鬧鈴分組的方式省電,即使你只調用了一個鬧鐘,這也是一個好的選擇,(可以確保在使用完畢時自動調用 AlarmManager.cancel ()。原文說的比較抽象,這裡詳細說一下:setInexactRepeating指的是設置非準確鬧鐘,使用方法:alarmManager.setInexactRepeating(AlarmManager.RTC, startTime,intervalL, pendingIntent),非準確鬧鐘只能保證大致的時間間隔,但是不一定準確,可能出現設置間隔為30分鐘,但是實際上一次間隔20分鐘,另一次間隔40分鐘。它的最大的好處是可以合併鬧鐘事件,比如間隔設置每30分鐘一次,不喚醒休眠,在休眠8小時後已經積累了16個鬧鐘事件,而在手機被喚醒的時候,非準時鬧鐘可以把16個事件合併為一個, 所以這麼看來,非準時鬧鐘一般來說比較節約能源。

Formatter.formatFileSize() 一個區域化的文件大小格式化工具。通俗來說就是把大小轉換為MB,G,KB之類的字符串。

ActionBar.hide()/.show() 顧名思義,隱藏和顯示ActionBar,可以優雅地在全屏和帶Actionbar之間轉換。

Linkify.addLinks() 在Text上添加連結。很實用。

StaticLayout 在自定義 View 中渲染文字的時候很實用。

Activity.onBackPressed() 很方便的管理back鍵的方法,有時候需要自己控制返回鍵的事件的時候,可以重寫一下。比如加入 「點兩下back鍵退出」 功能。

GestureDetector 用來監聽和相應對應的手勢事件,比如點擊,長按,慢滑動,快滑動,用起來很簡單,比你自己實現要方便許多。

DrawFilter 可以讓你在不調用onDrew方法的情況下,操作canvas,比了個如,你可以在創建自定義 View 的時候設置一個 DrawFilter,給父 View 裡面的所有 View 設置反別名。

ActivityManager.getMemoryClass() 告訴你你的機器還有多少內存,在計算緩存大小的時候會比較有用。

ViewStub 它是一個初始化不做任何事情的 View,但是之後可以載入一個布局文件。在慢加載 View 中很適合做佔位符。唯一的缺點就是不支持標籤,所以如果你不太小心的話,可能會在視圖結構中加入不需要的嵌套。

SystemClock.sleep() 這個方法在保證一定時間的 sleep 時很方便,通常我用來進行 debug 和模擬網絡延時。

DisplayMetrics.density 這個方法你可以獲取設備像素密度,大部分時候最好讓系統來自動進行縮放資源之類的操作,但是有時候控制的效果會更好一些.(尤其是在自定義View的時候)。

Pair.create() 方便構建類和構造器的方法。


----
Part 3:

UrlQuerySanitizer——使用這個工具可以方便對 URL 進行檢查。

Fragment.setArguments——因為在構建 Fragment 的時候不能加參數,所以這是個很好的東西,可以在創建 Fragment 之前設置參數(即使在 configuration 改變的時候仍然會導致銷毀/重建)。

DialogFragment.setShowsDialog ()—— 這是一個很巧妙的方式,DialogFragment 可以作為正常的 Fragment 顯示!這裡可以讓 Fragment 承擔雙重任務。我通常在創建 Fragment 的時候把 onCreateView ()和 onCreateDialog ()都加上,就可以創建一個具有雙重目的的 Fragment。

FragmentManager.enableDebugLogging ()——在需要觀察 Fragment 狀態的時候會有幫助。

LocalBroadcastManager——這個會比全局的 broadcast 更加安全,簡單,快速。像 otto 這樣的 Event buses 機制對你的應用場景更加有用。

PhoneNumberUtils.formatNumber ()——顧名思義,這是對數字進行格式化操作的時候用的。

Region.op()——我發現在對比兩個渲染之前的區域的時候很實用,如果你有兩條路徑,那麼怎麼知道它們是不是會重疊呢?使用這個方法就可以做到。

Application.registerActivityLifecycleCallbacks——雖然缺少官方文檔解釋,不過我想它就是註冊 Activity 的生命周期的一些回調方法(顧名思義),就是一個方便的工具。

versionNameSuffix——這個 gradle 設置可以讓你在基於不同構建類型的 manifest 中修改版本名這個屬性,例如,如果需要在在 debug 版本中以」-SNAPSHOT」結尾,那麼就可以輕鬆的看出當前是 debug 版還是 release 版。

CursorJoiner——如果你是只使用一個資料庫的話,使用 SQL 中的 join 就可以了,但是如果收到的數據是來自兩個獨立的 ContentProvider,那麼 CursorJoiner 就很實用了。

Genymotion——一個非常快的 Android 模擬器,本人一直在用。

-nodpi——在沒有特別定義的情況下,很多修飾符(-mdpi,-hdpi,-xdpi等等)都會默認自動縮放 assets/dimensions,有時候我們需要保持顯示一致,這種情況下就可以使用 -nodpi。

BroadcastRecevier.setDebugUnregister ()——又一個方便的調試工具。

Activity.recreate ()——強制讓 Activity 重建。

PackageManager.checkSignatures ()——如果同時安裝了兩個 app 的話,可以用這個方法檢查。如果不進行籤名檢查的話,其他人可以輕易通過使用一樣的包名來模仿你的 app。


----
Part 4:

Activity.isChangingConfigurations ()——如果在 Activity 中 configuration 會經常改變的話,使用這個方法就可以不用手動做保存狀態的工作了。

SearchRecentSuggestionsProvider——可以創建最近提示效果的 provider,是一個簡單快速的方法。

ViewTreeObserver——這是一個很棒的工具。可以進入到 VIew 裡面,並監控 View 結構的各種狀態,通常我都用來做 View 的測量操作(自定義視圖中經常用到)。

org.gradle.daemon=true——這句話可以幫助減少 Gradle 構建的時間,僅在命令行編譯的時候用到,因為 Android Studio 已經這樣使用了。

DatabaseUtils——一個包含各種資料庫操作的使用工具。

android:weightSum (LinearLayout)——如果想使用 layout weights,但是卻不想填充整個 LinearLayout 的話,就可以用 weightSum 來定義總的 weight 大小。

android:duplicateParentState (View)——此方法可以使得子 View 可以複製父 View 的狀態。比如如果一個 ViewGroup 是可點擊的,那麼可以用這個方法在它被點擊的時候讓它的子 View 都改變狀態。

android:clipChildren (ViewGroup)——如果此屬性設置為不可用,那麼 ViewGroup 的子 View 在繪製的時候會超出它的範圍,在做動畫的時候需要用到。

android:fillViewport (ScrollView)——在這片文章中有詳細介紹文章連結,可以解決在 ScrollView 中當內容不足的時候填不滿屏幕的問題。

android:tileMode (BitmapDrawable)——可以指定圖片使用重複填充的模式。

android:enterFadeDuration/android:exitFadeDuration (Drawables)——此屬性在 Drawable 具有多種狀態的時候,可以定義它展示前的淡入淡出效果。

android:scaleType (ImageView)——定義在 ImageView 中怎麼縮放/剪裁圖片,一般用的比較多的是「centerCrop」和「centerInside」。

Merge——此標籤可以在另一個布局文件中包含別的布局文件,而不用再新建一個 ViewGroup,對於自定義 ViewGroup 的時候也需要用到;可以通過載入一個帶有標籤的布局文件來自動定義它的子部件。

AtomicFile——通過使用備份文件進行文件的原子化操作。這個知識點之前我也寫過,不過最好還是有出一個官方的版本比較好。


----
Part 5:

ViewDragHelper ——視圖拖動是一個比較複雜的問題。這個類可以幫助解決不少問題。如果你需要一個例子,DrawerLayout就是利用它實現掃滑。Flavient Laurent 還寫了一些關於這方面的優秀文章。

PopupWindow——Android到處都在使用PopupWindow ,甚至你都沒有意識到(標題導航條ActionBar,自動補全AutoComplete,編輯框錯誤提醒Edittext Errors)。這個類是創建浮層內容的主要方法。

Actionbar.getThemrContext()——導航欄的主題化是很複雜的(不同於Activity其他部分的主題化)。你可以得到一個上下文(Context),用這個上下文創建的自定義組件可以得到正確的主題。

ThumbnailUtils——幫助創建縮略圖。通常我都是用現有的圖片加載庫(比如,Picasso 或者 Volley),不過這個ThumbnaiUtils可以創建視頻縮略圖。譯者註:該API從V8才開始支持。

Context.getExternalFilesDir()———— 申請了SD卡寫權限後,你可以在SD的任何地方寫數據,把你的數據寫在設計好的合適位置會更加有禮貌。這樣數據可以及時被清理,也會有更好的用戶體驗。此外,Android 4.0 Kitkat中在這個文件夾下寫數據是不需要權限的,每個用戶有自己的獨立的數據存儲路徑。譯者註:該API從V8才開始支持。

SparseArray——Map的高效優化版本。推薦了解姐妹類SparseBooleanArray、SparseIntArray和SparseLongArray。

PackageManager.setComponentEnabledSetting()——可以用來啟動或者禁用程序清單中的組件。對於關閉不需要的功能組件是非常贊的,比如關掉一個當前不用的廣播接收器。

SQLiteDatabase.yieldIfContendedSafely()——讓你暫時停止一個資料庫事務, 這樣你可以就不會佔用太多的系統資源。

Environment.getExternalStoragePublicDirectory()——還是那句話,用戶期望在SD卡上得到統一的用戶體驗。用這個方法可以獲得在用戶設備上放置指定類型文件(音樂、圖片等)的正確目錄。

View.generateViewId()——每次我都想要推薦動態生成控制項的ID。需要注意的是,不要和已經存在的控制項ID或者其他已經生成的控制項ID重複。

ActivityManager.clearApplicationUserData()—— 一鍵清理你的app產生的用戶數據,可能是做用戶退出登錄功能,有史以來最簡單的方式了。

Context.createConfigurationContext() ——自定義你的配置環境信息。我通常會遇到這樣的問題:強制讓一部分顯示在某個特定的環境下(倒不是我一直這樣瞎整,說來話長,你很難理解)。用這個實現起來可以稍微簡單一點。

ActivityOptions ——方便的定義兩個Activity切換的動畫。 使用ActivityOptionsCompat 可以很好解決舊版本的兼容問題。

AdapterViewFlipper.fyiWillBeAdvancedByHostKThx()——僅僅因為很好玩,沒有其他原因。在整個安卓開源項目中(AOSP the Android ——pen Source Project Android開放原始碼項目)中還有其他很有意思的東西(比如
GRAVITY_DEATH_STAR_I)。不過,都不像這個這樣,這個確實有用

ViewParent.requestDisallowInterceptTouchEvent() ——Android系統觸摸事件機制大多時候能夠默認處理,不過有時候你需要使用這個方法來剝奪父級控制項的控制權。




==============================>> 以上 <<===============================

譯文出自 @Gracker 的博客,Android Performance:
Part1: [譯]Android小技巧(1)
Part2: [譯]Android小技巧(2)
Part3:[譯]Android小技巧(3)
Part4: [譯]Android小技巧(4)
Part5: [譯]Android小技巧(5)

原文出自  Dan Lew 的博客,有 5 篇,強烈推薦。

Android Tips Round-Up, Part 1
Android Tips Round-Up, Part 2
Android Tips Round-Up, Part 3
Android Tips Round-Up, Part 4
Android Tips Round-Up, Part 5

最後做個福利廣告 zhengxiaopeng/android-dev-bookmarks · GitHub


=============================>> 以下個人補充 <<=============================

1、android:clipChildren 和 android:clipToPadding:clipToPadding就是說控制項的繪製區域是否在padding裡面的,true的情況下如果你設置了padding那麼繪製的區域就往裡 縮,clipChildren是指子控制項是否超過padding區域,這兩個屬性默認是true的,所以在設置了padding情況下,默認滾動是在 padding內部的,要達到上面的效果主要把這兩個屬性設置了false那麼這樣子控制項就能畫到padding的區域了。使用場景如:ActionBar(透明)下顯示Listview而第一項要在actionbar下。參見 android:clipToPadding和android:clipChildren。
2、Fragment 的 setUserVisibleHint 方法,可實現 fragment 對用戶可見時才加載資源(延遲加載)。
3、自定義 View 時重寫 hasOverlappingRendering 方法指定 View 是否有 Overlapping 的情況,提高渲染性能。
4、AutoScrollHelper,在可滾動視圖中長按邊緣實現滾動,Android View.OnTouchListener 的子類。
5、TouchSlop,系統所能識別出的被認為是最小的滑動距。離,ViewConfiguration.get(context).getScaledTouchSlop()。
6、VelocityTracker,可用於 View 滑動事件速度跟蹤。
7、AlphabetIndexer,字母索引輔助類。
8、Messenger,AIDL 實現的封裝,比手寫 AIDL 更方便。
9、ArrayMap,比 HashMap 更高的內存效率,但比 HashMap 慢,不適合有大量數據的場景。
10、Property,抽象類,封裝出對象中的一個易變的屬性值,使用場景如在使用屬性動畫時對動畫屬性的操作。
11、SortedList,v7 包中,見名知意。
...

清除畫布上的內容:canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

在自定義View的onDetachedFromWindow方法中清理與View相關的資源;

Fragment在onAttach方法中接收回調:

@Override public void onAttach(Activity activity) { super.onAttach(activity); try { mPageSelectedListener = (PageSelectedListener) activity; mMenuBtnOnclickListener = (MenuBtnOnClickListener) activity; mCommitBtnOnClickListener = (CommitBtnOnClickListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + "must implements listener"); } }

沒那麼麻煩,直接用toast的getView().getParent() 判斷是不是空就ok了。API 16 測試通過
public class MainActivity extends Activity {    private Toast toast;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        toast = Toast.makeText(getApplicationContext(), "確定退出?", 0);    }    public void onBackPressed() {        quitToast();    }    /*    public boolean onKeyDown(int keyCode, KeyEvent event) {        
           System.out.println(keyCode + "...." + event.getKeyCode());        
           if(keyCode == KeyEvent.KEYCODE_BACK){            
           quitToast();        
           }        
           return super.onKeyDown(keyCode, event);    
           }    */    private void quitToast() {        if(null == toast.getView().getParent()){            toast.show();        }else{            System.exit(0);        }    }}

原文連結:https://www.zhihu.com/question/33636939

相關焦點

  • Android 學習資料收集
    App 研發錄本書作者是包建強, 本書作者多年 App 開發的經驗總結, 從App架構的角度, 重點總結了 Android 應用開發中常見的實用技巧和疑難問題解決方法, 為打造高質量 App 提供有價值的實踐指導, 迅速提升應用開發能力和解決疑難問題的能力. 這本書非常有利於 Android 開發者進階.
  • Android 開發應該掌握的 Proguard 技巧
    >預檢(Preveirfy): 用來對Java class進行預驗證(預驗證主要是針對JME開發來說的,Android中沒有預驗證過程,默認是關閉)補充說明:根據proguard-android-optimize.txt對optimize的描述,在Android中使用該功能是有潛在風險的,並不能保證在所有版本的Dalvik虛擬機上正常運行,該選項默認是關閉的,如果開啟
  • 經驗丨Android開發最佳實踐
    其它選擇: Json-smart and Boon JSON網絡請求,緩存,圖片 執行請求後端伺服器,有幾種交互的解決方案,你應該考慮實現你自己的網絡客戶端。使用 Volley或Retrofit。Volley 同時提供圖片緩存類。若果你選擇使用Retrofit,那麼考慮使用Picasso 來加載圖片和緩存,同時使用OkHttp作為高效的網絡請求。
  • Java開發中抽象類和接口都有什麼區別?
    Java在Java軟體開發中抽象類和接口會有一個明顯的區別,具體會有哪些區別呢?下文就兩者的區別做了一個比較詳細的描述。抽象類抽象類:1、抽象類使用abstract修飾;2、抽象類不能實例化,即不能使用new關鍵字來實例化對象
  • 很少有人會告訴你的 Android 開發基本常識 移動開發
    對於提高解決問題能力我有兩個建議:學會學習和思考:學習的過程中要廣度和深度並存,Android 應用開發本身對技術功底的要求不高(因為很多底層的東西都被 google、框架、開原始碼給封裝起來了,多數時候你只需要看 ReadMe 或者 API 知道怎麼用就可以了),更多地是在你遇到問題的時候知道這個問題能夠通過什麼方法和方式來解決。
  • Android開發在路上:少去踩坑,多走捷徑
    最近一朋友提了幾個Android問題讓我幫忙寫個小分享,我覺得對新人還是挺有幫助的,所以有了這個小分享。
  • [乾貨] 【譯】Android 開發規範與應用
    因此,使用一個正常範圍的類庫文件,同時使用dex-method-counts工具來決定哪些類庫可以再65k限制之下使用,特別的避免使用Guava類庫,因為它包含超過13k個方法。Activities and FragmentsFragments應該作為你實現UI界面默認選擇。你可以重複使用Fragments用戶接口來組合成你的應用。
  • 【android開發】Android binder學習一:主要概念
    1.binder通信機制概述binder通信是一種client-server的通信結構,1.從表面上來看,是client通過獲得一個server的代理接口,對server進行直接調用;2.實際上,代理接口中定義的方法與server中定義的方法是一一對應的;3.client調用某個代理接口中的方法時,代理接口的方法會將client傳遞的參數打包成為
  • Android中AIDL的基本用法
    查看IRemoteService.java,可以看到其內部有一個靜態抽象類Stub,這個Stub繼承自Binder類,並抽象實現了其父接口,這裡對應的是IRemoteService這個接口:public static abstract class Stub extends android.os.Binder implements learn.android.kangel.learning.IRemoteService
  • Android 中的 MVP 模式(帶實例)
    所以也就有了這張圖片(MVP和MVC的對比)MVP和MVC的對比其實最明顯的區別就是,MVC中是允許Model和View進行交互的,而MVP中很明顯,Model與View之間的交互由Presenter完成。還有一點就是Presenter與View之間的交互是通過接口的(代碼中會體現)。
  • 【學習經驗】android開發的學習路線
    3.面向對象的抽象,封裝,繼承,多態,類與對象,對象初始化和回收;構造函數、this關鍵字、方法和方法的參數傳遞過程、static關鍵字、內部類,Java的垃極回收機制,Javadoc介紹。4.對象實例化過程、方法的覆蓋、final關鍵字、抽象類、接口、繼承的優點和缺點剖析;對象的多態性:子類和父類之間的轉換、抽象類和接口在多態中的應用、多態帶來的好處。
  • 開發總結:Android反編譯方法的總結
    【IT168技術】對於軟體開發人員來說,保護代碼安全也是比較重要的因素之一,不過目前來說Google Android平臺選擇了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其實就是一個MIME為ZIP的壓縮包,我們修改ZIP後綴名方式可以看到內部的文件結構,類似Sun JavaMe的Jar
  • 來開發一個wanandroid快應用吧
    ,但作為android程式設計師還是有必要了解如何開發一個快應用的。安裝完打開如圖所示,此時按鈕都不能點擊,還需要再安裝平臺預覽版兩個應用安裝完就可以安裝快應用了2.安裝運行rpk包有兩種方式:推薦第一種方式,調試比較方便。
  • 從零開始學Android架構(一)——什麼是設計模式?
    設計模式我們在做事情時,很多事情都是有套路的,這個套路是前人總結的經驗,什麼情況下按照什麼套路去做,一般都能把事情做的很順利,寫代碼也不例外,在寫代碼的過程中,很多場景都有固定的寫法套路,這個套路就是設計模式,設計模式是由GOF總結出的一套開發人員在實際開發中經常面臨的場景的解決方案,設計模式並不是GOF發明的,GOF只是總結了這些套路,通過採用這些套路,也就是設計模式,我們寫出的代碼更加可靠性
  • Android開發必備的「80」個開源庫
    Android 學習筆記https://github.com/CharonChui/AndroidNoteAndroid 開發中的日常積累https://github.com/lizhangqu/CoreLink/blob/master/README.mdAndroid-Tipshttps://github.com/
  • Android經典藍牙開發簡介
    Android架構設計---MVP模式第(二)篇,如何減少類爆炸公司的項目最近需要用到藍牙開發的相關內容,因此特地查閱了Google官方文檔的內容並進行二次整理,希望能對需要學習該部分的朋友有所幫助。
  • Android 11來了,快!扶我起來
    雖然今年I/O大會不開了,但是安卓11肯定要發布的,所以開發人員也別想跑,也需要適配啊!「這就來這就來,哎!如果你有Pixel,那麼恭喜你可以直接通過刷OTA的方式來體驗和提前適配安卓11。「「什麼?不知道怎麼配置?真的是,給你說下吧,記好了。」在 Android Studio 中,依次點擊 Tools > SDK Manager。
  • 世界級的 Android 測試開發流程(一)
    我們花了很多時間去克服這些挑戰,在某個時刻我們意識到是方法錯了。即便測試覆蓋率很高,我們的軟體仍然在出錯。最壞的是,從我們的測試中,無法得到任何反饋。解決我們的問題的關鍵是識別出我們一直碰到的問題所在:我們的接受測試太難寫了,因為我們需要提供配置API來模擬接受測試的初始狀態。大部分時候,我們的測試會隨機失敗,而我們不知道為什麼。
  • Android中的窗口——Activity
    導讀:本文節選自人民郵電出版社《Android開發權威指南》一書。該書的作者是李寧。李寧是eoeAndroid最元老的版主之一,一直活躍在Android開發第一線,在熱心解答大家技術問題的同時積累了大量有價值的實戰經驗。
  • Android入門學習_Android創建新項目及開發
    創建一個新項目是很簡單的,只要你安裝了Eclipse插件,並且你的Eclipse軟體版本在3.2或3.3,你就可以開始開發了。本文引用地址:http://www.eepw.com.cn/article/201609/303970.htm首先, 看一下要創建Hello, World程序從高級層面上有哪些步驟:1, 通過 File -> New -> Project 菜單,建立新項目Android Project2, 填寫新項目各種參數。