360doc--QCamera的文章 http://www.ahfyzs.com/rssperson/20123969.aspx 360doc (http://www.ahfyzs.com) zh-cn 360doc--個(gè)人圖書館 騰訊Bugly干貨分享:Android應(yīng)用性能評(píng)測(cè)調(diào)優(yōu) http://www.ahfyzs.com/content/15/0617/11/20123969_478717192.shtml 2015/6/17 11:46:19
騰訊Bugly干貨分享:Android應(yīng)用性能評(píng)測(cè)調(diào)優(yōu)。在智能手機(jī)App競(jìng)爭(zhēng)越來越激烈的今天,Android App各項(xiàng)性能如CPU、內(nèi)存消耗等都是我們?cè)陂_發(fā)測(cè)試中需要關(guān)注的指標(biāo),如何將App打造得更加“優(yōu)雅”是我們需要不斷追求探索的方向,下面我們從內(nèi)存和流暢度兩個(gè)緯度來說說如何對(duì)Android App進(jìn)行評(píng)測(cè)和調(diào)優(yōu)。所以FPS為1這個(gè)數(shù)并不能代表當(dāng)前App在UI上界面不流暢,因此1s內(nèi)VSync這個(gè)Loop運(yùn)行了多少次更加能說明當(dāng)前App的流暢程度。
Android如何調(diào)用第三方SO庫 http://www.ahfyzs.com/content/15/0607/14/20123969_476303933.shtml 2015/6/7 14:31:08
Android如何調(diào)用第三方SO庫問題描述:Android如何調(diào)用第三方SO庫;MyMaps工程下創(chuàng)建目錄libs以及l(fā)ibs/armeabi,把baidumapapi.jar放在的libs/目錄下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。MyMaps下創(chuàng)建目錄libs以及l(fā)ibs/armeabi,并把baidumapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar庫的規(guī)則,格式:別名:jar文件路徑。
Android TouchEvent事件傳遞機(jī)制 http://www.ahfyzs.com/content/15/0604/11/20123969_475568597.shtml 2015/6/4 11:05:25
Android TouchEvent事件傳遞機(jī)制跟touch事件相關(guān)的3個(gè)方法:public boolean dispatchTouchEvent(MotionEvent ev); //用來分派eventpublic boolean onInterceptTouchEvent(MotionEvent ev); //用來攔截eventpublic boolean onTouchEvent(MotionEvent ev); //用來處理event 擁有這三個(gè)方法的類:如果該事件會(huì)再次被向上傳遞到我這里來由我的onTouchEvent()來處理,那就說明下面的View都沒能成功處理該事件);
android事件傳遞機(jī)制以及onInterceptTouchEvent()和onTouchEvent()詳解二之小秘與領(lǐng)導(dǎo)的故事 http://www.ahfyzs.com/content/15/0604/09/20123969_475544682.shtml 2015/6/4 9:40:02
android事件傳遞機(jī)制以及onInterceptTouchEvent()和onTouchEvent()詳解二之小秘與領(lǐng)導(dǎo)的故事。MyTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:text="AB" android:textSize="40sp" android:textStyle="bold" android:background="#FFFFFF" android:textColor="#0000FF"/> </com.touchstudy.
細(xì)說Android事件傳遞機(jī)制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent) http://www.ahfyzs.com/content/15/0603/10/20123969_475315818.shtml 2015/6/3 10:55:36
Android dispatchTouchEvent介紹 http://www.ahfyzs.com/content/15/0603/10/20123969_475302491.shtml 2015/6/3 10:08:50
一個(gè)最簡(jiǎn)單的屏幕觸摸動(dòng)作觸發(fā)了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP.ACTION_MOVE: Log.d(TAG, "dispatchTouchEvent action:ACTION_MOVE");D/MyLinearLayout(13452): dispatchTouchEvent action:ACTION_DOWND/MyLinearLayout(13452): onInterceptTouchEvent action:ACTION_DOWND/MyLinearLayout(13452): ---onTouchEvent action:ACTION_DOWN.
Android總結(jié)篇系列:Activity中幾個(gè)主要函數(shù)詳解 http://www.ahfyzs.com/content/15/0602/22/20123969_475228068.shtml 2015/6/2 22:34:20
Android總結(jié)篇系列:Activity中幾個(gè)主要函數(shù)詳解。提到這類函數(shù)組合,相信只要有過一段時(shí)間Android開發(fā)的來說都很熟悉了,此函數(shù)組合主要用于如下場(chǎng)景:用戶在A Activity上點(diǎn)擊某個(gè)按鈕,跳轉(zhuǎn)到B Activity,然后用戶在B Activity上進(jìn)行一些具體的操作,待操作完成后返回到A Activity,同時(shí)常常將B Activity中操作的一些數(shù)據(jù)返回到A Activity中。此方法直接將當(dāng)前Activity所在的Task移到后臺(tái),同時(shí)保留activity順序和狀態(tài)。
Thread的run()與start()的區(qū)別 http://www.ahfyzs.com/content/15/0602/10/20123969_475052004.shtml 2015/6/2 10:13:53
當(dāng)調(diào)用了線程對(duì)象的start方法之后,該線程就進(jìn)入了就緒狀態(tài),但是此時(shí)線程調(diào)度程序還沒有把該線程設(shè)置為當(dāng)前線程,此時(shí)處于就緒狀態(tài)。線程調(diào)度程序?qū)⑻幱诰途w狀態(tài)的線程設(shè)置為當(dāng)前線程,此時(shí)線程就進(jìn)入了運(yùn)行狀態(tài),開始運(yùn)行run函數(shù)當(dāng)中的代碼。然后通過此Thread類調(diào)用方法run()來完成其運(yùn)行操作的, 這里方法run()稱為線程體,它包含了要執(zhí)行的這個(gè)線程的內(nèi)容, Run方法運(yùn)行結(jié)束, 此線程終止。
通過ViewGroup自定義控件 http://www.ahfyzs.com/content/15/0601/22/20123969_474983668.shtml 2015/6/1 22:40:04
public void setCol(int col){this.mCol = col;復(fù)制代碼 代碼如下:public class TableActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Intent intent = this.getIntent();Bundle bun = intent.getExtras();int row = bun.getInt("row");int col = bun.getInt("col");TableView table = new TableView(this, row, col);setContentView(table);}
Android多線程下安全訪問數(shù)據(jù)庫 http://www.ahfyzs.com/content/15/0601/21/20123969_474970549.shtml 2015/6/1 21:46:16
public class DatabaseManager { private static DatabaseManager instance;public static synchronized void initialize(Context context, SQLiteOpenHelper helper) { if (instance == null) { instance = new DatabaseManager();} } public static synchronized DatabaseManager getInstance() { if (instance == null) { throw new IllegalStateException(DatabaseManager.
Android事件傳遞機(jī)制 http://www.ahfyzs.com/content/15/0601/21/20123969_474968353.shtml 2015/6/1 21:37:34
從源碼中可以看到,dispatchTouchEvent方法只處理了ACTIONDOWN事件,前面提到過,所有的事件都是以按下為起點(diǎn)的,所以,Android認(rèn)為當(dāng)ACTIONDOWN事件沒有執(zhí)行時(shí),后面的事件都是沒有意義的,所以這里首先判斷ACTION_DOWN事件。onTouch事件要先于onClick事件執(zhí)行,onTouch在事件分發(fā)方法dispatchTouchEvent中調(diào)用,而onClick在事件處理方法onTouchEvent中被調(diào)用,onTouchEvent要后于dispatchTouchEvent方法的調(diào)用。
Android中SQLite應(yīng)用詳解 http://www.ahfyzs.com/content/15/0531/17/20123969_474682785.shtml 2015/5/31 17:22:17
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
Android 使用Parcelable序列化對(duì)象 http://www.ahfyzs.com/content/15/0530/19/20123969_474489650.shtml 2015/5/30 19:41:10
Android 使用Parcelable序列化對(duì)象 Android序列化對(duì)象主要有兩種方法,實(shí)現(xiàn)Serializable接口、或者實(shí)現(xiàn)Parcelable接口。簡(jiǎn)而言之:通過writeToParcel將你的對(duì)象映射成Parcel對(duì)象,再通過createFromParcel將Parcel對(duì)象映射成你的對(duì)象。
Serializable和Parcelable實(shí)現(xiàn)序列化 http://www.ahfyzs.com/content/15/0530/19/20123969_474489100.shtml 2015/5/30 19:38:08
Serializable和Parcelable實(shí)現(xiàn)序列化 一 序列化原因:四.通過實(shí)現(xiàn)Parcelable接口序列化對(duì)象的步驟: 1、聲明實(shí)現(xiàn)接口Parcelable 2、實(shí)現(xiàn)Parcelable的方法writeToParcel,將你的對(duì)象序列化為一個(gè)Parcel對(duì)象 3、實(shí)例化靜態(tài)內(nèi)部對(duì)象CREATOR實(shí)現(xiàn)接口Parcelable.Creator:Creator<Person> CREATOR = new Creator<Person>() {@Overridepublic Person createFromParcel(Parcel source) {Log.d(TAG,"createFromParcel");
java并發(fā)編程 - Executor框架 http://www.ahfyzs.com/content/15/0530/19/20123969_474488394.shtml 2015/5/30 19:34:16
Executor框架是指java 5中引入的一系列并發(fā)庫中與executor相關(guān)的一些功能類,其中包括線程池,Executor,Executors,ExecutorService,CompletionService,F(xiàn)uture,Callable等。MainJava代碼 int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 }; ConcurrentCalculator calc = new ConcurrentCalculator(); Long sum = calc.sum(numbers); System.out.println(sum); calc.close(); 四、CompletionService.
java并發(fā)編程 http://www.ahfyzs.com/content/15/0530/19/20123969_474488303.shtml 2015/5/30 19:33:43
Executor框架是指java 5中引入的一系列并發(fā)庫中與executor相關(guān)的一些功能類,其中包括線程池,Executor,Executors,ExecutorService,CompletionService,F(xiàn)uture,Callable等。MainJava代碼 int[] numbers = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 }; ConcurrentCalculator calc = new ConcurrentCalculator(); Long sum = calc.sum(numbers); System.out.println(sum); calc.close(); 四、CompletionService.
Google Gson 使用簡(jiǎn)介 http://www.ahfyzs.com/content/15/0529/19/20123969_474273930.shtml 2015/5/29 19:30:20
下面的例子中我們示例如何將一個(gè)數(shù)據(jù)轉(zhuǎn)換成 json 串,并使用 Gson.toJson() 方法將數(shù)組序列化為 JSON,以及Gson.fromJson() 方法將 JSON 串反序列化為 java 數(shù)組。// // Create a new instance of Gson // Gson gson = new Gson();public class MapToJson { public static void main(String[] args) { Map<String, String> colours = new HashMap<String, String>();Map<String, String> map = gson.fromJson(json, type);
Google Gson 使用簡(jiǎn)介 http://www.ahfyzs.com/content/15/0529/19/20123969_474273880.shtml 2015/5/29 19:30:04
下面的例子中我們示例如何將一個(gè)數(shù)據(jù)轉(zhuǎn)換成 json 串,并使用 Gson.toJson() 方法將數(shù)組序列化為 JSON,以及Gson.fromJson() 方法將 JSON 串反序列化為 java 數(shù)組。// // Create a new instance of Gson // Gson gson = new Gson();public class MapToJson { public static void main(String[] args) { Map<String, String> colours = new HashMap<String, String>();Map<String, String> map = gson.fromJson(json, type);
Android Volley框架的幾種post提交請(qǐng)求方式 http://www.ahfyzs.com/content/15/0529/17/20123969_474247171.shtml 2015/5/29 17:10:52
Android Volley框架的幾種post提交請(qǐng)求方式。} }) { @Override protected Map<String, String> getParams() { //在這里設(shè)置需要post的參數(shù) Map<String, String> map = new HashMap<String, String>(); map.put("name1", "value1"); map.put("name2", "value2"); return params; }}; requestQueue.add(stringRequest);
Volley 源碼解析 http://www.ahfyzs.com/content/15/0526/12/20123969_473351153.shtml 2015/5/26 12:59:48
Volley 源碼解析Volley 源碼解析。放在緩存請(qǐng)求隊(duì)列中的 Request,將通過緩存獲取數(shù)據(jù);緩存調(diào)度線程不斷的從緩存請(qǐng)求隊(duì)列中取出 Request 去處理,網(wǎng)絡(luò)調(diào)度線程不斷的從網(wǎng)絡(luò)請(qǐng)求隊(duì)列中取出 Request 去處理。通過 key 獲取請(qǐng)求的緩存實(shí)體public void put(String key, Entry entry); 存入一個(gè)請(qǐng)求的緩存實(shí)體public void remove(String key); 移除指定的緩存實(shí)體public void clear(); 清空緩存 (2). 代表緩存實(shí)體的內(nèi)部類 Entry.