1.IPC
Inter-Process Communication ,含義:爲進程間通信或者跨進程通信,是指兩個進程之間進行數據交換的過程。
指定android:process屬性,然後編譯運行,從而使其運行在一個獨立的進程中。但是多進程並不是這麼簡單的,
多進程會造成以下問題:
- 靜態成員和單例模式會失效
- 線程同步機制完全失效
- SharePreferences的可靠性下降
- Application會多次創建
系統創建新的進程肯定會分配獨立的虛擬機,這個過程其實就是啓動一個應用的過程,所以就重新啓動,創建一個新的AppLication。=====》》》跨進程通信,比如通過Intent來傳遞數據,共享文件和SharedPreferences,基於Binder和Messager和AIDL以及socket
Android中的IPC方式:
- 使用Bundle
- 使用文件共享
- 使用Messenger
- 使用AIDL
- 使用ContentProvider
- 使用Socket
2.View
MotionEvent
- ACTION_DOWN 手指剛接觸屏幕
- ACTION_MOVE 手指在屏幕上移動
- ACTION_UP 手指離開屏幕的一瞬間
通過MotionEvent對象我們可以得到點擊事件發生的x座標,y座標。getX/getY返回的是
相對於當前View左上角x和y的座標。getRawX/getRawY返回的是相對於手機屏幕左上角的x座標和y座標。
TouchSlop
系統所能識別的被認爲是滑動的最小距離。當手指在屏幕上滑動時,如果兩次滑動之間的距離小於這個變量,呢麼系統就不認爲你是在進行滑動操作。原因就是滑動的距離太短,系統不認爲這個是滑動。ViewConfiguration.get(getContext()).getScaledTouchSlop()。在處理滑動的時候可以跟這個參數相比,做一些處理,可以有更好的用戶體驗。
VelocityTracker GestureDetector Scroller
- VelocityTracker 追蹤速度,用於追蹤手指在滑動過程中得速度,包括水平速度和豎直速度,
VelocityTracker x=VelocityTracker.obtain();
x.addMovement(event);
//獲取當前速度 在1000ms內滑動距離的像素數
x.computeCurrentVelocity(1000);
int xVelocity=(int)x.getXVelocity();
int yVelocity=(int)x.getYVelocity();
速度=(終點位置-起點位置)/時間段
//當不需要的時候 需要調用clear方法來重置並回收內存:
x.clear();
x.recycle();
- GestureDetector
手勢測量,輔助檢測用戶的單擊、滑動、長按、雙擊等行爲。
GestureDetector mGestureDetector = new GestureDetector(this);
//解決長按屏幕後無法拖動的現象
mGestureDetector.setIsLongpressEnabled(false);
onSigleTapUp(單擊)、onFling(快速滑動)、onScroll(拖動)、onLongPress(長按)和onDoubleTap(雙擊)。如果監聽滑動相關的建議自己在onTouchEvent中實現,如果要監聽雙擊這種行爲的話,呢麼使用GestureDetector。
- Scroller
彈性滑動