Android 筆記

Recently I am focusing on improving my Android development skills. Here are the websites I read.

  1. Introduce Model-View-Presenter Concept
  2. RxJava 2.0: Simpler form of AsyncTask
  3. Lambda: Simpler form of callback
    •  https://yongjhih.gitbooks.io/feed/content/lambda.html
  4. Object/relation mapping. Greatly reduce development time in a database.
    • http://greenrobot.org/
      • GreenDao Schema Migration: https://piercezaifman.com/how-to-setup-database-migrations-with-greendao/
  5. Easy debugger for Android sqlite database
  6. Android testing: Robolectric (still studying)
  7. New Layout: Constraint Layout
  8. Improved ListView: PlaceHolderView
  9. Android Asset Generator: online icon generate tool for Android
  10. Unit testing in Android (JUnit, Mockito)

Some are extracted from: Mindorks: Android Development Best Practices

 

Advertisements

泰國探親的十一天

今年大部分時間都不在香港,上半年去了曼徹斯特留學及歐遊,暑假去了佛山兩天,前兩天才結束一星期的台灣之旅,現在我又身處曼谷。

這次來到泰國的目的主要是探望親戚以及為鄉下的新家舉行入伙儀式。

大約下午五時半回到曼谷的家。在姨姨的士多坐了一會兒後,便去吃了在泰國的第一餐。在泰國吃飯的價格是跟香港的一模一樣,但是港幣兌泰銖的匯率大概是1:4,這裡的食物真的是又便宜又好吃。這兩碟海鮮炒飯和肉碎蛋飯,再加一枝汽水,價格只是九十五泰銖,大約是二十五蚊。然後逛了商場買些日用品和宵夜回家。這個商場有不少香港可見的品牌店,例如是Uniqlo、眼鏡88、Marks Spencer和八番拉麵。

Continue reading “泰國探親的十一天”

 台灣六天五夜

三個多月的學期終於過去,我才有空打開網誌,記下我這次台灣遊的旅程。

這是我第三次到台灣,該去的景點都已經去過,所以這次旅行的目的就是放鬆一下,逛逛街,拋開所有煩惱,享受假期。經歷了總共一個月長的Solo trip後,我終於擺脫了單人遊帶來的孤獨和疲憊,跟認識了快十年的同學作伴前往台灣。

兩個人旅行的好處就是我不用管太多,於是我沒有自己買機票,去哪裏住哪裏通通沒管。結果下了飛機之後,沒有目的地,因為我們都懶的訂酒店。偷懶的代價就是兩個人在台北車站附近瞎逛找酒店,讓清晨五點鐘起床趕飛機的我直接累死。幸好在網上找到青年旅舍,不然就流浪街頭。

第一天的行程除了找酒店之外就是逛西門町買衣服,再到寧夏夜市吃晚飯。我真的很忌妒台灣人,晚上九點十點多的時間,還是可以很方便的以優惠的價格吃到美食。不像香港,吃宵夜多數就是到McDonald 。我特別喜歡10台幣一串的肉串,名字我忘了,它是把牛肉、葱和韮菜串起來燒,再加醬和椒鹽。吃飽了就從夜市散步回到西門町的旅舍。

Continue reading ” 台灣六天五夜”

四十天的實習


這個夏天,我找到了一份在人力資源部做網頁設計的實習。

上半年去了英國留學,六月尾回來時的實習空缺已經屈指可數,幸好我從中發現了一份在宏利公司做關於WeChat的工作。經過繁複的行政工作,一個月後正式上班,開啟四十天的實習旅程。

在這四十天,我原本的工作時設計一些適合手機瀏覽的網頁,以及研究WeChat 官方帳戶平台提供的功能。但是基於種種原因,四十天過後,能夠面世的網頁只有兩個,亦是我在本職上僅有的貢獻。

其實我做的網頁不只兩個,嚴格數一下的話,它們也只是用了我八九天的時間。剩下的時間,有一部分是用來設計一個很資料性的網站,可是因為使用體驗不理想而擱置;有一部分是研究於WeChat上設置投票功能,但是不知道網站系統是否支援而中斷;剩下來的一部分,就是在幫忙籌備活動。

在這四十天裡,有過迷惘,源於工作種類與我的所長漸行漸遠;有過沮喪,源於別人的不理解;有過難忘,源於活動完滿舉行而如釋重負。我滿足嗎?滿足,只是不是來自我本職上的成就感。我開心嗎?開心,因為很幸運地認識了四個青澀的伙伴。

說起來,我真的很感謝這四個同伴。一起午飯,免卻了以往一個人吃飯的孤獨;不斤斤計較,工作上不用一個人硬撐。每天上班都不會苦悶,因為我們可以像中學生活般,吵吵鬧鬧。人生漫長,能夠有一段四十天長的溫馨回憶,已教人知足。

除了他們,我也很感謝她們。沒有架子的上司們,讓我放下緊張感。真的,每一天都是美好的。倘若我不是讀IT的話,這裡是一個不錯的選擇。

實習過後,就迎來我的畢業季,最後一個學年。畢業之後,我又會在哪裏工作,在哪裏展開人生新的一章呢?

 

蘇格蘭的三天兩夜

緊接着倫敦遊,我坐通宵巴士到愛丁堡。

到達巴士站時,得知巴士將延誤一小時才出發,讓我十分緊張。我本來的計劃是隔天早上七點半抵達愛丁堡,吃早餐後就到一個本地旅遊團報到。這一小時的延誤足以讓我錯過旅行團,一百鎊亦隨之蒸發。在巴士上渡過的晚上,我難以入眠,一方面擔心第二天的行程,另一方面是路程顛簸,又有小孩吵鬧,再加上我自己本來就不是容易睡得着。

在半醒半睡的情況下,我來到了愛丁堡。時間是上午八時正,幸好還來得及報到。愛丁堡給我的第一個感覺就是冷,在六月份的早上,讓我感覺是十度左右。我以為曼徹斯特和愛丁堡的天氣不會相差太遠,就只帶了一件外套,結果冷得我鼻涕直流,不停打冷震。再加上下雨,短短十分鐘的步行,每一秒鐘我都懷疑自己能不能夠堅持下去。

這次參加的旅行團,是兩天一夜的高地遊,團友共十六人,多是亞洲人,而且一雙一對,只有我和一位加拿人是背包客。參加旅行團的優點是不用計劃行程,住宿不需要自己安排,又可以旅遊巴士代步,非常方便。

Continue reading “蘇格蘭的三天兩夜”

烏克蘭的五天四夜(1)

本來想先完成較近期的旅行日記,但是以我這麼懶惰的性格,沒有幾個月都寫不完。所以我先把最特別的烏克蘭之旅記下,不然這個四月份的旅遊就會被我遺忘。

我是從匈牙利布達佩斯出發,坐火車穿越國境,短暫停留Lviv一天,再到首都基輔。我在網上參考其他背包客的攻略,下午三時先坐四小時車程的火車到匈牙利的邊境城市。本以為邊境火車站規模再小仍會有人流和餐廳,怎料只有2、3個跟我一樣等待跨境火車的本地人,以及即將打烊的便利店。於是我的晚餐就只有兩包餅乾。

等了兩個小時,卻只用了十五分鐘就從匈牙利去到了烏克蘭。列車是很舊式的火車,車廂是被昏暗的黃光點亮,而途中因兩國鐵路路軌的寬度不同而要換車輪。

下車後,就在昏暗的環境下過關。可能是香港人較少通過此處進入烏克蘭,關員要打電話查詢我的有效停留期,並對我詳細審問。幸好這個漂亮的女關員的英語不錯,能夠讓我解釋清楚到烏克蘭旅遊的細節,不然我就要被通宵扣留了,雖然我毫不介意跟她長時間共處。

Continue reading “烏克蘭的五天四夜(1)”

英國倫敦兩天遊

早上九點鐘從曼徹斯特出發,約六、七個小時的車程,我來到了倫敦。其實在四個月前我已經來過倫敦,這此重遊舊地,是為了彌補上一次沒有拍照紀念的遺憾。

綿綿細雨下,我的第一站是阿仙奴球迷的聖地-酋長球場。第二次來到酋長球場,依然覺得很激動。每星期凌晨三時起床觀看的球賽,正是在這裡上演。美中不足的是,球場正值換草時期,那個奪獎的球場變得光禿禿一片。希望新賽季阿仙奴能奪得冠軍。

Continue reading “英國倫敦兩天遊”

Note: Press back button to return to Main Activity

Suppose we have two activities: MainActivity and GameActivity , and only MainActivity can start GameActivity.

Manifest setting:

<activity android:name=".MainActivity">
    ...
</activity>
<activity android:name=".GameActivity"
    android:launchMode="singleTask">
</activity>

From the Cheese Factory’ blog (2015), for an activity with “singleTask” as the launch mode:

But if there is an existed one, all of Activities placed above that singleTask Activity would be automatically and cruelly destroyed in the proper way (lifecycle trigged) to make that an Activity we want to appear on top of stack.

Overriding the onKeyDown() and onBackPressed() methods in GameActivity .

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (Integer.parseInt(android.os.Build.VERSION.SDK) > 5
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        Log.d(log_name, "onKeyDown Called");
        onBackPressed();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    //Go back to main activity.
    Intent intent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(intent);
}

(from http://stackoverflow.com/a/3142471)

Also, overriding the onKeyDown() and onBackPressed() methods in MainActivity, so that when the back button is pressed, home screen is returned.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 //same as above...
}

@Override
public void onBackPressed() {
   moveTaskToBack(true);
}

Overall Effect:

Start MainActivity (M), and then start GameActivity (G) from it.

–> Back stack: M > G (G is on the top of the stack).

Press back button in GameActivity.

–> Back stack: M > G > M (A new MainActivity is created).

If we start GameActivity again from MainActivity.

–> Back stack: M > G. (Since GameActivity is running, the newer MainActivity is destroyed).

 

Or if we Press back button in MainActivity, home screen is returned. And then we go back to the app.

–> Back stack: M > G > M (Remain unchanged).

 

 

Reference:

The Cheese Factory. (2015). Understand Android Activity’s launchMode: standard, singleTop, singleTask and singleInstance . https://inthecheesefactory.com/blog/understand-android-activity-launchmode/en