2017/06/07

スマホの時間 わたしは何を失うか

使用Smart Phone所帶來的壞處
參考來源:スマホの時間 わたしは何を失うか

- 夜晚使用手機容易造成睡眠不足,打亂生理時鐘,腦會漸漸無法區分早上或晚上

- 若長時間使用手機,身體也不活動的話,會影響骨骼、肌肉發育

- 若長時間使用手機,學習能力與視力會下降,也會遲緩腦部專司
記憶或判斷部分的發達

- 若長時間使用手機,與人直接交談的時間也跟著減少,會降低溝通能力

2017/05/25

Android開發 - Service

- 跟Activity比較大的區別是Service沒有圖形化介面,
通常用來處理比較耗時的操作

- Service不是一個獨立的Process,也不是一個Thread
(Process可能包括多個Thread,也佔有CPU資源)

- Service運行在UI Thread,若在Service執行耗時操作可能會
產生ANR,若需要做耗時操作時,最好使用IntentService)

- 有兩種方式可以啟動Service:Context.startService()或
Context.bindService(),不同的啟動方式,生命週期也不一樣

- 若要停止Service,可以在Activity裡呼叫stopService()或
在Service的onStartCommand()裡呼叫stopSelf()

2017/05/23

Android開發 - Broadcast Receiver

- Broadcast Receiver主要是用來監聽被廣播的事件(Intent),
為了達到目的,Broadcast Receiver必須進行註冊,方法有:
在AndroidMainifest.xml進行註冊,或是在應用程式的代碼
當中進行註冊

- 在AndroidManifest.xml註冊的方式
intent-filter用來過濾廣播事件,只有符合action的值時,
此Broadcast Receiver才會被觸發,才會調用Broadcast Receiver
裡頭的onReceive方法,而當發送完畢後,此Broadcast Receiver
會被銷毀。若在AndroidManifest.xml註冊,即使關掉應用程式,
還是會接收到廣播事件

- 在代碼中註冊的方式
註冊Broadcast Receiver
  registerReceiver(receiver,filter)
取消Broadcast Receiver
  unregisterReceiver(receiver)
若Broadcast Receiver用於更新UI,通常會採用這種方式,也就是
在Activity啟動時註冊,在Activity不可見之後取消註冊

2017/05/22

Android開發 - XML文件解析

- SAX的全名為Simple API for XML(可延伸標記式語言),工作原理基本上
是對文檔依序掃描,當掃描到document開始與結束、element開始與結束、
document結束...時通知event處理函數做相對應動作,然後繼續
同樣的掃描,直到文檔結束

- ContentHandler是一個特殊的SAX interface,位於org.xml.sax,
用來解析XML文件的主體內容,有以下幾種方法
void startDocument()
void endDocument()
void startElement(String uri,String localName,String qName,Attributes atts)
void endElement(String uri,String localName,String qName)
void characters(char[] ch,int start,int length)

解析文檔的過程
- 創建事件處理程序
- 創建SAX解析器
- 將事件處理程序分配給解析器
- 對文檔進行解析,將每個事件發送給處理程序

Android開發 - Content Provider

Content Provider的基本概念
- 為存取資料提供統一的interface
- 可在不同的應用程式之間共享資料
- Android為常見的一些資料提供了Content Provider,
如:圖片、通訊錄、影音檔...等

URI
- 每一個Content Provider都擁有一個公共的URI,
這個URI用來表示Content Provider所提供的資料
- Android所提供的Content Provider都存在
android.provider這個package裡頭

如何實作Content Provider
- 定義一個CONTENT_URL常量
- 定義一個Class繼承Content Provider
- 實作和query, insert, update, delete, getType
和onCreate方法
- 在AndroidManifest.xml中聲明

2017/05/21

HTTP請求的種類

GET:透過請求URI得到資源
POST:向服務器提交新的內容
PUT:修改某個內容
DELETE:刪除某個內容
OPTIONS:查看服務器的性能
TRACE:遠端診斷服務器

GET與POST的不同

- GET方法用於從服務器取回資料,POST用於向服務器提交資料

- 使用GET方法向服務器提交的資料通常不超過2K,使用POST
向服務器提交的資料通常沒有限制

- GET請求是將所要提交的資料附在URL之後,而POST請求是將
提交的資料放在Request body中

2017/05/18

Android Activity Lifecycle

OnCreate:當Activity對象第一次被創建時調用
OnStart:當Activity變得可見時調用
OnResume:當Activity準備跟用戶互動時調用
OnPause:當Activity準備啟動另外一個Activity之前調用
OnStop:當前Activity變得不可見時調用
OnDestroy:當前Activity被銷毀之前調用
OnReStart:當Activity再次啟動之前調用


圖片來源:https://developer.android.com/guide/components/images/activity_lifecycle.png


一個Activity的狀態可能包含
Resumed:Activity處於正常的運行狀態
Paused:另一個Activity位於前端,但當前的Activity仍然可見
(譬如開啟一個未佔滿整個螢幕的對話框)
Stopped:另一個Activity位於前端,完全遮住當前的Activity

譬如寫一個Activity A,裡頭有一個按鈕,若點擊按鈕將
開啟另一個Activity B

當A被執行時:執行A.OnCreate→A.OnStart→A.OnResume

在A點擊按鈕:執行A.OnPause→B.OnCreate→B.OnStart
→B.OnResume→A.OnStop

開啟B點擊返回鍵:執行B.OnPause→A.OnReStart→A.OnStart
→A.OnResume→B.OnStop→B.OnDestroy

2017/05/06

話題退燒、降溫的日文說法

その話は終わった 話題の熱が冷めた 話題は過去の物となった

Android開發 - ViewGroup的簡介

- ViewGroup像一個容器,裡面可以任意放多個View(稱為child view),
而各個child view的位置是由parent view決定

例:只要是android:layout_開頭的,基本上是由ViewGroup控制,其他
譬如android:text,android:background...才是view本身的屬性

- LinearLayout是ViewGroup的一種,若child view沒有設定android:
layout_weight,則預設值為0,意即不會改變其大小。weight越大,
則在parent view所分配到的空間也越大。

例:有一個LinearLayout,android:orientation設為垂直(水平),裡頭
放了A,B,C三個View,都設定為
android:layout_height="0dp"
android:layout_weight="1"
則會呈現A,B,C在垂直(水平)方向各佔整個螢幕畫面的1/3的結果

例:有一個LinearLayout,android:orientation設為垂直(水平),裡頭
放了D,E兩個View,D未設定android:layout_weight,而E設定為
android:layout_height="0dp"
android:layout_weight="1"
則會呈現整個螢幕畫面除了D大小不變以外,絕大部分的空間都會分配
給E的結果

- RelativeLayout也是ViewGroup的一種,但沒有weight的概念,若有一個
RelativeLayout裡頭放了X,Y,Z三個View,會先畫X,然後Y疊在X上面,
最後Z再疊上去