@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
adb.exe kill-server
adb.exe start-server
for /F %%i IN ('adb.exe shell getprop persist.sys.language') do (
SET language=%%i
)
echo !language!
2013年6月5日 星期三
[Batch] 取得指令的結果
setlocal enabledelayedexpansion 變量延遲
2013年5月14日 星期二
[Batch] if exist路徑寫法;解決if else皆跑到的bug
IF EXIST的語法如下
ex: C:\demo
1. 在xp更舊版本(實際版本不詳),必須在path前後,加雙引號
ex: IF EXIST "C:\demo"
2. 在xp之後,在path前後可不加雙引號
ex: IF EXIST C:\demo
3. 但路徑若有空白,則必須加雙引號
B. PATH為變數+字串的路徑
ex: set apk_path="C:\demo"
%apk_path%child_path
1. 在win7 sp1(6.1.7601)版本之後,可直接使用%變數%字串
ex: IF EXIST %apk_path%child_path
2. 在win7(6.1.7600)版本及更舊,必須使用"%變數%字串"
ex: IF EXIST "%apk_path%child_path"
IF EXIST "[PATH]" ( echo a ) ELSE ( echo b )A. PATH為已知路徑
ex: C:\demo
1. 在xp更舊版本(實際版本不詳),必須在path前後,加雙引號
ex: IF EXIST "C:\demo"
2. 在xp之後,在path前後可不加雙引號
ex: IF EXIST C:\demo
3. 但路徑若有空白,則必須加雙引號
B. PATH為變數+字串的路徑
ex: set apk_path="C:\demo"
%apk_path%child_path
1. 在win7 sp1(6.1.7601)版本之後,可直接使用%變數%字串
ex: IF EXIST %apk_path%child_path
2. 在win7(6.1.7600)版本及更舊,必須使用"%變數%字串"
ex: IF EXIST "%apk_path%child_path"
2013年5月11日 星期六
[Java] Two-phase Termination
小朋友總是把玩具散落一地. 晚上到了睡覺時間, 媽媽會說 “快把玩具收好, 再去睡覺喔”, 這時小朋友停下來不玩並開始收拾玩具.
開一條thread,在thread中判斷何時要終止自己的thread
並在終止之前做一些處理
※補充說明 :
不可以使用 Thread 類的 stop 方法: java.lang.Thread 類有一個用來強制結束掉線程的stop 方法. 但是現在stop 已經不被建議使用 (depreciated). 原因是 stop 方法會使實例喪失安全性的保障. 使用 stop 方法時, 線程會拋出 java.lang. ThreadDeath 異常而馬上結束. 即使線程再執行某些 critical process.
refs1: http://openhome.cc/Gossip/DesignPattern/TwoPhaseTermination.htm
refs2: http://puremonkey2010.blogspot.tw/2010/10/java-two-phase-termination-pattern.html
開一條thread,在thread中判斷何時要終止自己的thread
並在終止之前做一些處理
※補充說明 :
不可以使用 Thread 類的 stop 方法: java.lang.Thread 類有一個用來強制結束掉線程的stop 方法. 但是現在stop 已經不被建議使用 (depreciated). 原因是 stop 方法會使實例喪失安全性的保障. 使用 stop 方法時, 線程會拋出 java.lang. ThreadDeath 異常而馬上結束. 即使線程再執行某些 critical process.
refs1: http://openhome.cc/Gossip/DesignPattern/TwoPhaseTermination.htm
refs2: http://puremonkey2010.blogspot.tw/2010/10/java-two-phase-termination-pattern.html
2013年5月9日 星期四
2013年5月8日 星期三
2013年4月29日 星期一
[Language][JAVA] MVC概念
MVC(Model-View-Controller)是軟體工程上面的一種軟體設計模式,目的即是將程式與設計做一個區隔,創造一個權責分明的開發架構,透過分層的切割,讓「視覺設計師專心做設計,程式設計師專心寫程式」,使開發上更能模組化及提高可維護性,其做法是將應用程式分割成以下三個邏輯元件:
- Model-主要負責應用程式中的商業邏輯(Business Logic),商業邏輯是一個非技術用語,用來描述應用程式功能性的演算法以及資料庫與使用者介面之間的資料交換。Model封裝了應用程式中對資料的存取並提供可重複使用的函式庫,舉凡資料庫存取的抽象化,郵件的遞送,資料的驗證與稽核都會在此進行。
- View-簡而言之,即是我們用來呈現Model取得的資料與蒐集使用者互動資料的網頁,HTML / CSS / JavaScript都是使用於此層的技術。
- Controller
- 蒐集使用者於View中所輸入的資料並決定由哪一支程式進行資料的處理。
- 接收Model所回傳的資料並在解析後傳遞給View作呈現。
- 所有程式的例外處理以及流程控制。
refs: https://ascc.sinica.edu.tw/iascc/articals.php?_section=2.4&_op=?articalID:4311
JAVA MVC example
refs: http://www.leepoint.net/notes-java/GUI/structure/40mvc.html
2013年4月23日 星期二
[Git] 開branch日常使用
1. 以某個tag為基礎建立新branch
$ git branch [branch_name] [tag]
2. 切換到新branch
$ git checkout [branch_name]
3. 建立檔案並打commit
$ git add
$ git commit
4. push到server (也順便在server建立此branch)
$ git push origin [local_branch_name]:[server_branch_name]
ex: git push origin v1:v1
$ git branch [branch_name] [tag]
2. 切換到新branch
$ git checkout [branch_name]
3. 建立檔案並打commit
$ git add
$ git commit
4. push到server (也順便在server建立此branch)
$ git push origin [local_branch_name]:[server_branch_name]
ex: git push origin v1:v1
2013年4月19日 星期五
2013年4月15日 星期一
2013年4月8日 星期一
[Android] 分析This Handler class should be static or leaks
好文章,留著筆記:http://www.beyondcompare.cn/this-handler-class-should-be-static-or-leaks.html
重點擷取以下:
Handler作为Activity的内部类有可能会导致内存泄露的问题。
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的引用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。
重點擷取以下:
Handler作为Activity的内部类有可能会导致内存泄露的问题。
Handler类应该应该为static类型,否则有可能造成泄露。在程序消息队列中排队的消息保持了对目标Handler类的引用。如果Handler是个内部类,那么它也会保持它所在的外部类的引用。为了避免泄露这个外部类,应该将Handler声明为static嵌套类,并且使用对外部类的弱应用。
package cn.beyondcompare.statichandlerdemo;
import java.lang.ref.WeakReference;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
public class MainActivity extends Activity {
MyHandler handler = new MyHandler(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test();
}
static class MyHandler extends Handler {
WeakReference mActivity;
MyHandler(MainActivity activity) {
mActivity = new WeakReference (activity);
}
@Override
public void handleMessage(Message msg) {
MainActivity theActivity = (MainActivity) mActivity.get();
switch (msg.what) {
case 0:
theActivity.test1();
break;
}
}
};
private void test() {
handler.sendEmptyMessage(0);
}
private void test1() {
}
}
訂閱:
文章 (Atom)