锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>$ simg2img system.img system.ext4.img
$ sudo mount -t ext4 system.ext4.img system
]]>
]]>
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_AAR_LIBRARIES := leakcanary-android-aar leakcanary-watcher-aar leakcanary-analyzer-aar
LOCAL_STATIC_JAVA_LIBRARIES := haha
LOCAL_MODULE_TAGS := optional
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.squareup.leakcanary
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_SRC_FILES := \
$(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := XXXXX
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=
haha:libs/haha-2.0.3.jar \
leakcanary-android-aar:libs/leakcanary-android-1.5.aar \
leakcanary-watcher-aar:libs/leakcanary-watcher-1.5.aar \
leakcanary-analyzer-aar:libs/leakcanary-analyzer-1.5.aar
include $(BUILD_MULTI_PREBUILT)
include $(call all-makefiles-under,$(LOCAL_PATH))
]]>
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev gcc-multilib g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc libsdl-dev libesd0-dev libncurses5-dev lib32ncurses5 lib32stdc++6 rapidsvn nautilus-open-terminal libswitch-perl subversion openjdk-7-jdk lib32z1 libusb-dev libpcap-dev lib32bz2-1.0 libmtp-common mtp-tools libmtp-dev libmtp-runtime libmtp9
2.璁劇疆鐜鍙橀噺錛屼慨鏀?bashrc
]]>
mIntent.setAction("XXX.XXX.XXX");//浣犲畾涔夌殑service鐨刟ction
mIntent.setPackage(getPackageName());//榪欓噷浣犻渶瑕佽緗綘搴旂敤鐨勫寘鍚?/span>
context.startService(mIntent);
2銆佸皢闅愬紡鍚姩杞崲涓烘樉紺哄惎鍔細
PackageManager pm = context.getPackageManager();
List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
if (resolveInfo == null || resolveInfo.size() != 1) {
return null;
}
ResolveInfo serviceInfo = resolveInfo.get(0);
String packageName = serviceInfo.serviceInfo.packageName;
String className = serviceInfo.serviceInfo.name;
ComponentName component = new ComponentName(packageName, className);
Intent explicitIntent = new Intent(implicitIntent);
explicitIntent.setComponent(component);
return explicitIntent;
}
mIntent.setAction("XXX.XXX.XXX");
Intent eintent = new Intent(getExplicitIntent(mContext,mIntent));
context.startService(eintent);
]]>
]]>
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.
鍙互浣跨敤濡備笅鏂瑰紡瑙e喅錛?br />灝唍otifyDataSetChanged 鏀懼湪handler涓紝鍚屾椂鍔犱笂綰㈠瓧瀛椾綋浠g爜錛?br />
]]> mCameraDevice.setPreviewCallback(mPreviewCallback);
mCameraDevice.startPreview();
private final class PreviewCallback implements
android.hardware.Camera.PreviewCallback {
public void onPreviewFrame(byte[] data, android.hardware.Camera camera) {
Size size = mParameters.getPreviewSize();
YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, size.width,
size.height, null);
ByteArrayOutputStream outputSteam = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, size.width, size.height), 80, outputSteam);
}
}
]]>
涓鑸潵璇達紝鑷畾涔夋帶浠墮兘浼氬幓閲嶅啓View鐨刼nMeasure鏂規硶錛屽洜涓鴻鏂規硶鎸囧畾璇ユ帶浠跺湪灞忓箷涓婄殑澶у皬銆?/p>
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
onMeasure浼犲叆鐨勪袱涓弬鏁版槸鐢變笂涓灞傛帶浠朵紶鍏ョ殑澶у皬錛屾湁澶氱鎯呭喌錛岄噸鍐欒鏂規硶鏃墮渶瑕佸璁$畻鎺т歡鐨勫疄闄呭ぇ灝忥紝鐒跺悗璋冪敤setMeasuredDimension(int, int)璁劇疆瀹為檯澶у皬銆?/p>
onMeasure浼犲叆鐨剋idthMeasureSpec鍜宧eightMeasureSpec涓嶆槸涓鑸殑灝哄鏁板鹼紝鑰屾槸灝嗘ā寮忓拰灝哄緇勫悎鍦ㄤ竴璧風殑鏁板箋傛垜浠渶瑕侀氳繃int mode = MeasureSpec.getMode(widthMeasureSpec)寰楀埌妯″紡錛岀敤int size = MeasureSpec.getSize(widthMeasureSpec)寰楀埌灝哄銆?/span>
mode鍏辨湁涓夌鎯呭喌錛屽彇鍊煎垎鍒負MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, MeasureSpec.AT_MOST銆?/span>
MeasureSpec.EXACTLY鏄簿紜昂瀵革紝褰撴垜浠皢鎺т歡鐨刲ayout_width鎴杔ayout_height鎸囧畾涓哄叿浣撴暟鍊兼椂濡俛ndorid:layout_width="50dip"錛屾垨鑰呬負FILL_PARENT鏄紝閮芥槸鎺т歡澶у皬宸茬粡紜畾鐨勬儏鍐碉紝閮芥槸綺劇‘灝哄銆?/span>
MeasureSpec.AT_MOST鏄渶澶у昂瀵革紝褰撴帶浠剁殑layout_width鎴杔ayout_height鎸囧畾涓篧RAP_CONTENT鏃訛紝鎺т歡澶у皬涓鑸殢鐫鎺т歡鐨勫瓙絀洪棿鎴栧唴瀹硅繘琛屽彉鍖栵紝姝ゆ椂鎺т歡灝哄鍙涓嶈秴榪囩埗鎺т歡鍏佽鐨勬渶澶у昂瀵稿嵆鍙傚洜姝わ紝姝ゆ椂鐨刴ode鏄疉T_MOST錛宻ize緇欏嚭浜嗙埗鎺т歡鍏佽鐨勬渶澶у昂瀵搞?/p>
MeasureSpec.UNSPECIFIED鏄湭鎸囧畾灝哄錛岃繖縐嶆儏鍐典笉澶氾紝涓鑸兘鏄埗鎺т歡鏄疉dapterView錛岄氳繃measure鏂規硶浼犲叆鐨勬ā寮忋?/p>
鍥犳錛屽湪閲嶅啓onMeasure鏂規硶鏃惰鏍規嵁妯″紡涓嶅悓榪涜灝哄璁$畻銆備笅闈唬鐮佸氨鏄竴縐嶆瘮杈冨吀鍨嬬殑鏂瑰紡錛?br />
public static int getScreenBrightness(Activity activity) {
int value = 0;
ContentResolver cr = activity.getContentResolver();
try {
value = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS);
} catch (SettingNotFoundException e) {
}
return value;
}
# 璁劇疆灞忓箷浜害
public static void setScreenBrightness(Activity activity, int value) {
WindowManager.LayoutParams params = activity.getWindow().getAttributes();
params.screenBrightness = value / 255f;
activity.getWindow().setAttributes(params);
}
Android緋葷粺涓璍ooper璐熻矗綆$悊綰跨▼鐨勬秷鎭槦鍒楀拰娑堟伅寰幆錛屽叿浣撳疄鐜拌鍙傝僉ooper鐨勬簮鐮併?鍙互閫氳繃Loop.myLooper()寰楀埌褰撳墠綰跨▼鐨凩ooper瀵硅薄錛岄氳繃Loop.getMainLooper()鍙互鑾峰緱褰撳墠榪涚▼鐨勪富綰跨▼鐨凩ooper瀵硅薄銆?/font>
鍓嶉潰鎻愬埌Android緋葷粺鐨勬秷鎭槦鍒楀拰娑堟伅寰幆閮芥槸閽堝鍏蜂綋綰跨▼鐨勶紝涓涓嚎紼嬪彲浠ュ瓨鍦紙褰撶劧涔熷彲浠ヤ笉瀛樺湪錛変竴涓秷鎭槦鍒楀拰涓涓秷鎭驚鐜紙Looper錛夛紝鐗瑰畾綰跨▼鐨勬秷鎭彧鑳藉垎鍙戠粰鏈嚎紼嬶紝涓嶈兘榪涜璺ㄧ嚎紼嬶紝璺ㄨ繘紼嬮氳銆備絾鏄垱寤虹殑宸ヤ綔綰跨▼榛樿鏄病鏈夋秷鎭驚鐜拰娑堟伅闃熷垪鐨勶紝濡傛灉鎯寵璇ョ嚎紼嬪叿鏈夋秷鎭槦鍒楀拰娑堟伅寰幆錛岄渶瑕佸湪綰跨▼涓鍏堣皟鐢↙ooper.prepare()鏉ュ垱寤烘秷鎭槦鍒楋紝鐒跺悗璋冪敤Looper.loop()榪涘叆娑堟伅寰幆銆傚涓嬩緥鎵紺猴細
class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } }
榪欐牱浣犵殑綰跨▼灝卞叿鏈変簡娑堟伅澶勭悊鏈哄埗浜嗭紝鍦℉andler涓繘琛屾秷鎭鐞嗐?/font>
Activity鏄竴涓猆I綰跨▼錛岃繍琛屼簬涓葷嚎紼嬩腑錛孉ndroid緋葷粺鍦ㄥ惎鍔ㄧ殑鏃跺欎細涓篈ctivity鍒涘緩涓涓秷鎭槦鍒楀拰娑堟伅寰幆錛圠ooper錛夈傝緇嗗疄鐜拌鍙傝傾ctivityThread.java鏂囦歡銆?/font>
Handler鐨勪綔鐢ㄦ槸鎶婃秷鎭姞鍏ョ壒瀹氱殑錛圠ooper錛夋秷鎭槦鍒椾腑錛屽茍鍒嗗彂鍜屽鐞嗚娑堟伅闃熷垪涓殑娑堟伅銆傛瀯閫燞andler鐨勬椂鍊欏彲浠ユ寚瀹氫竴涓狶ooper瀵硅薄錛屽鏋滀笉鎸囧畾鍒欏埄鐢ㄥ綋鍓嶇嚎紼嬬殑Looper鍒涘緩銆傝緇嗗疄鐜拌鍙傝僉ooper鐨勬簮鐮併?/font>
Activity銆丩ooper銆丠andler鐨勫叧緋誨涓嬪浘鎵紺猴細
涓涓狝ctivity涓彲浠ュ垱寤哄涓伐浣滅嚎紼嬫垨鑰呭叾浠栫殑緇勪歡錛屽鏋滆繖浜涚嚎紼嬫垨鑰呯粍浠舵妸浠栦滑鐨勬秷鎭斁鍏ctivity鐨勪富綰跨▼娑堟伅闃熷垪錛岄偅涔堣娑堟伅灝變細鍦ㄤ富綰跨▼涓鐞嗕簡銆傚洜涓轟富綰跨▼涓鑸礋璐g晫闈㈢殑鏇存柊鎿嶄綔錛屽茍涓擜ndroid緋葷粺涓殑weget涓嶆槸綰跨▼瀹夊叏鐨勶紝鎵浠ヨ繖縐嶆柟寮忓彲浠ュ緢濂界殑瀹炵幇Android鐣岄潰鏇存柊銆傚湪Android緋葷粺涓繖縐嶆柟寮忔湁鐫騫挎硾鐨勮繍鐢ㄣ?/font>
閭d箞鍙﹀涓涓嚎紼嬫庢牱鎶婃秷鎭斁鍏ヤ富綰跨▼鐨勬秷鎭槦鍒楀憿錛熺瓟妗堟槸閫氳繃Handle瀵硅薄錛屽彧瑕丠andler瀵硅薄浠ヤ富綰跨▼鐨凩ooper鍒涘緩錛岄偅涔堣皟鐢℉andler鐨剆endMessage絳夋帴鍙o紝灝嗕細鎶婃秷鎭斁鍏ラ槦鍒楅兘灝嗘槸鏀懼叆涓葷嚎紼嬬殑娑堟伅闃熷垪銆傚茍涓斿皢浼氬湪Handler涓葷嚎紼嬩腑璋冪敤璇andler鐨刪andleMessage鎺ュ彛鏉ュ鐞嗘秷鎭?/font>
榪欓噷闈㈡秹鍙婂埌綰跨▼鍚屾闂錛岃鍏堝弬鑰冨涓嬩緥瀛愭潵鐞嗚ВHandler瀵硅薄鐨勭嚎紼嬫ā鍨嬶細
1銆侀鍏堝垱寤篗yHandler宸ョ▼銆?/font>
2銆佸湪MyHandler.java涓姞鍏ュ涓嬬殑浠g爜錛?/font>
package com.simon; import android.app.Activity; import android.os.Bundle; import android.os.Message; import android.util.Log; import android.os.Handler; public class MyHandler extends Activity { static final String TAG = "Handler"; Handler h = new Handler(){ public void handleMessage (Message msg) { switch(msg.what) { case HANDLER_TEST: Log.d(TAG, "The handler thread id = " + Thread.currentThread().getId() + "\n"); break; } } }; static final int HANDLER_TEST = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "The main thread id = " + Thread.currentThread().getId() + "\n"); new myThread().start(); setContentView(R.layout.main); } class myThread extends Thread { public void run() { Message msg = new Message(); msg.what = HANDLER_TEST; h.sendMessage(msg); Log.d(TAG, "The worker thread id = " + Thread.currentThread().getId() + "\n"); } } }
鍦ㄨ繖涓緥瀛愪腑鎴戜滑涓昏鏄墦鍗幫紝榪欑澶勭悊鏈哄埗鍚勪釜妯″潡鐨勬墍澶勭殑綰跨▼鎯呭喌銆傚涓嬫槸鎴戠殑鏈哄櫒榪愯緇撴灉錛?/font>
09-10 23:40:51.478: DEBUG/Handler(302): The main thread id = 1 09-10 23:40:51.569: DEBUG/Handler(302): The worker thread id = 8 09-10 23:40:52.128: DEBUG/Handler(302): The handler thread id = 1
鎴戜滑鍙互鐪嬪嚭娑堟伅澶勭悊鏄湪涓葷嚎紼嬩腑澶勭悊鐨勶紝鍦ㄦ秷鎭鐞嗗嚱鏁頒腑鍙互瀹夊叏鐨勮皟鐢ㄤ富綰跨▼涓殑浠諱綍璧勬簮錛屽寘鎷埛鏂扮晫闈€傚伐浣滅嚎紼嬪拰涓葷嚎紼嬭繍琛屽湪涓嶅悓鐨勭嚎紼嬩腑錛屾墍浠ュ繀欏昏娉ㄦ剰榪欎袱涓嚎紼嬮棿鐨勭珵浜夊叧緋匯?/font>
涓婁緥涓紝浣犲彲鑳芥敞鎰忓埌鍦ㄥ伐浣滅嚎紼嬩腑璁塊棶浜嗕富綰跨▼handler瀵硅薄錛屽茍鍦ㄨ皟鐢╤andler鐨勫璞″悜娑堟伅闃熷垪鍔犲叆浜嗕竴涓秷鎭傝繖涓繃紼嬩腑浼氫笉浼氬嚭鐜版秷鎭槦鍒楁暟鎹笉涓鑷撮棶棰樺憿錛熺瓟妗堟槸handler瀵硅薄涓嶄細鍑洪棶棰橈紝鍥犱負handler瀵硅薄綆$悊鐨凩ooper瀵硅薄鏄嚎紼嬪畨鍏ㄧ殑錛屼笉綆℃槸鍔犲叆娑堟伅鍒版秷鎭槦鍒楀拰浠庨槦鍒楄鍑烘秷鎭兘鏄湁鍚屾瀵硅薄淇濇姢鐨勶紝鍏蜂綋璇峰弬鑰僉ooper.java鏂囦歡銆備笂渚嬩腑娌℃湁淇敼handler瀵硅薄錛屾墍浠andler瀵硅薄涓嶅彲鑳戒細鍑虹幇鏁版嵁涓嶄竴鑷寸殑闂銆?/font>
閫氳繃涓婇潰鐨勫垎鏋愶紝鎴戜滑鍙互寰楀嚭濡備笅緇撹錛?/font>
1銆佸鏋滈氳繃宸ヤ綔綰跨▼鍒鋒柊鐣岄潰錛屾帹鑽愪嬌鐢╤andler瀵硅薄鏉ュ疄鐜般?/font>
2銆佹敞鎰忓伐浣滅嚎紼嬪拰涓葷嚎紼嬩箣闂寸殑绔炰簤鍏崇郴銆傛帹鑽恏andler瀵硅薄鍦ㄤ富綰跨▼涓瀯閫犲畬鎴愶紙騫朵笖鍚姩宸ヤ綔綰跨▼涔嬪悗涓嶈鍐嶄慨鏀逛箣錛屽惁鍒欎細鍑虹幇鏁版嵁涓嶄竴鑷達級錛岀劧鍚庡湪宸ヤ綔綰跨▼涓彲浠ユ斁蹇冪殑璋冪敤鍙戦佹秷鎭疭endMessage絳夋帴鍙c?/font>
3銆侀櫎浜?鎵榪扮殑hanlder瀵硅薄涔嬪鐨勪換浣曚富綰跨▼鐨勬垚鍛樺彉閲忓鏋滃湪宸ヤ綔綰跨▼涓皟鐢紝浠旂粏鑰冭檻綰跨▼鍚屾闂銆傚鏋滄湁蹇呰闇瑕佸姞鍏ュ悓姝ュ璞′繚鎶よ鍙橀噺銆?/font>
4銆乭andler瀵硅薄鐨刪andleMessage鎺ュ彛灝嗕細鍦ㄤ富綰跨▼涓皟鐢ㄣ傚湪榪欎釜鍑芥暟鍙互鏀懼績鐨勮皟鐢ㄤ富綰跨▼涓換浣曞彉閲忓拰鍑芥暟錛岃繘鑰屽畬鎴愭洿鏂癠I鐨勪換鍔°?/font>
5銆丄ndroid寰堝API涔熷埄鐢℉andler榪欑綰跨▼鐗規э紝浣滀負涓縐嶅洖璋冨嚱鏁扮殑鍙樼錛屾潵閫氱煡璋冪敤鑰呫傝繖鏍稟ndroid妗嗘灦灝卞彲浠ュ湪鍏剁嚎紼嬩腑灝嗘秷鎭彂閫佸埌璋冪敤鑰呯殑綰跨▼娑堟伅闃熷垪涔嬩腑錛屼笉鐢ㄦ媴蹇冪嚎紼嬪悓姝ョ殑闂銆?/font>
娣卞叆鐞嗚ВAndroid娑堟伅澶勭悊鏈哄埗瀵逛簬搴旂敤紼嬪簭寮鍙戦潪甯擱噸瑕侊紝涔熷彲浠ヨ浣犲綰跨▼鍚屾鏈夋洿鍔犳繁鍒葷殑璁よ瘑銆備互涓婃槸鏈榪慡imon瀛︿範Android娑堟伅澶勭悊鏈哄埗鐨勪竴鐐瑰効鎬葷粨錛屽鏈夐敊璇箣澶勮涓嶅悵鎸囨暀銆?/font>
鍏抽敭鍦ㄤ簬LOCAL_STATIC_JAVA_LIBRARIES := libarity鍜孡OCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:lily.jar
鍏跺疄libarity鏄釜鍚嶅瓧鍙互闅忎究鍙栵紝浣嗘槸涓や釜灞炴х殑鍊艱涓鏍峰氨濂戒簡錛屼絾鏄悗闈㈤偅涓啋鍙烽噷闈㈠氨涓瀹氳鍐欎綘鐨刯ar鍖呭悕錛屼綘鐨刯ar鍖呬竴瀹氭斁鍦ㄥ伐紼嬬殑鏍圭洰褰曞氨濂戒簡錛岀洰褰曠粨鏋勫涓嬶細
-res
-src
-com
-ianc
-testjar
TestJar.java
android.mk
AndroidManifest.xml
default.properties
lily.jar
瀵逛簬鑳藉鏄劇ず鏂囧瓧鐨勬帶浠訛紙濡俆extView EditText RadioButton Button CheckBox Chronometer絳夌瓑錛夛紝浣犳湁鏃墮渶瑕佹帶鍒跺瓧浣撶殑澶у皬銆侫ndroid騫沖彴瀹氫箟浜嗕笁縐嶅瓧浣撳ぇ灝忋?/p>
"?android:attr/textAppearanceLarge"
"?android:attr/textAppearanceMedium"
"?android:attr/textAppearanceSmall"
浣跨敤鏂規硶涓猴細
android:textAppearance="?android:attr/textAppearanceLarge"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textAppearance="?android:attr/textAppearanceSmall"
鎴?/p>
style="?android:attr/textAppearanceLarge"
style="?android:attr/textAppearanceMedium"
style="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorPrimary"
android:textColor="?android:attr/textColorSecondary"
android:textColor="?android:attr/textColorTertiary"
android:textColor="?android:attr/textColorPrimaryInverse"
android:textColor="?android:attr/textColorSecondaryInverse"
style="?android:attr/progressBarStyleHorizontal"
style="?android:attr/progressBarStyleLarge"
style="?android:attr/progressBarStyleSmall"
style="?android:attr/progressBarStyleSmallTitle"
妯悜錛?/p>
<View android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="?android:attr/listDivider" />
綰靛悜錛?/p>
<View android:layout_width="1dip"
android:layout_height="fill_parent"
android:background="?android:attr/listDivider" />
style="?android:attr/starStyle"
style="?android:attr/listSeparatorTextViewStyle"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingRight="?android:attr/scrollbarSize"
style="?android:attr/windowTitleBackgroundStyle"
style="?android:attr/windowTitleStyle"
android:layout_height="?android:attr/windowTitleSize"
android:background="?android:attr/windowBackground"