PIXNET Logo登入

~No Magic Just Basic~

跳到主文

歡迎光臨frank6831在痞客邦的小天地

部落格全站分類:

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 2月 02 週六 201317:42
  • [Tool] 使用ccache可以加快build code的速度

在build android的source code,如果電腦硬體不夠好時,往往會build很久,google非常的貼心,針對此情況提供了ccache的機制可以減少編譯的時間,通常第一次clean build會花比較久時間,往後就會節省大約20%的時間,提升開發的效率。


添加環境變數
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(7,564)

  • 個人分類:Android
▲top
  • 1月 20 週日 201313:21
  • [Android] RemoteView & AppWidget機制介紹

@ What is Widget
AppWidget framework通過broadcast intents和你的widget溝通,例如當需要更新Widget的時候。透過使用RemoteViews構建和發送。RemoteViews將Widget的layout和特定内容包裝後,藉由IPC傳送到Launcher,最後顯示到桌面上。

@ What is RemoteViews

RemoteViews並不是一個真正的View,而只是一個用於整合Widget裡layout呈現與view元件行為的一個Wrapper class(也就是appWidget所要長得樣子),透過RemoteView把建立該Widget需要的resource ID和各個元件的事件封裝起來。 RemoteViews會通過進程間通信機制傳遞給AppWidgetHost。


 

@為什麼要有RomoteView


因為activity跟widget的運作機制的不同,應用程式AP裡的Avtivity要更新元件時,可以直接取得該元件進行更新。而因為Widget架構是繼承appWidgetProvider,所以每個widget就是一個BroadcastReceiver。

 

在Widget裡並無法直接對於元件進行更新,因為Widget實際畫面是在Launcher AppWidgetHostView上呈現,故實際對於Widget元件的操作都在AppWidgetHostView進行,所以需要藉由RemoteView,主要目的在把Widget的所有元件進行封裝,透過RemoteView告訴Launcher你想要的AppWidget是長什麼樣子又因為Widget跟Launcher處在不同的process,所以運作過程如下:

 

1. 透過AppWidgetManger傳送要更新AppWidget的識別id以及更新內容(remoteview)。

2. 在AppWidgetManger通知AppWidgetService哪些AppWidgetId需要更新View。

3. 透過aidl IPC機制,將widgetID跟RemoteView傳遞給AppWidgetHost。

4. AppWidgetHost會根據WidgetId找出放置該Widget的AppWidgetHostView,接著把RemoteView傳送過去。

5. 在AppWidgetHostView的updateAppWidget主要任務為:


(1)第一次:會建立Widget的畫面與資料

會呼叫RemoteView.apply() : 執行LayoutInflater.inflate()將xml轉成view,並且抓出RemoteView裡的元件,處理相對應的method,

如updateViews.setTextViewText(),則會去執行TextView的setTextViewText()

-->接著設定Widget的LayoutParams,也就是呈現在畫面上的大小跟位置

-->最後把remoteView加到ViewGroup裡。

 


(2)第二次:更新Widget資訊

-->呼叫RemoteView的reapply(context,view)

-->處理RemoteView元件裡相對應的method。

 


public final AppWidgetHostView createView(Context context, int appWidgetId,
AppWidgetProviderInfo appWidget) {

AppWidgetHostView view = onCreateView(context, appWidgetId, appWidget);
view.setAppWidget(appWidgetId, appWidget);
synchronized (mViews) {
mViews.put(appWidgetId, view);
}

RemoteViews views;
try {
views = sService.getAppWidgetViews(appWidgetId);
} catch (RemoteException e) {
throw new RuntimeException("system server dead?", e);
}
view.updateAppWidget(views);
return view;
}

 

 

當Widget接收到廣播需要update時,會透過appWidgetManager呼叫appWidgetService,然後利用aidl的機制將訊息傳給Home,通知Launcher需作更新UI的動作。



(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(2,737)

  • 個人分類:Android
▲top
  • 1月 06 週日 201307:10
  • [Tool] Tmux(在家工作的好工具)

工作上有時需要假日連回公司,sync最新的code base或是build code的動作,可以節省隔天上班時等build code的時間,一開始都是直接用pietty或是ssh連回去,缺點就是當在build code時,家裡電腦上的console視窗不能關閉,這樣就中斷build code的工作了,所以就找尋看看有沒有可以關閉後還能夠繼續工作的tool。
後來發現了Screen跟Tmux,比較之下是覺得Tmux使用起來比較簡單,於是就安裝了tmux來試看看。
# 安裝Tmux
sudo apt-get install tmux
# 進入TMUX
$ tmux
# 列出現有的session
$ tmux ls
# 繼續之前的session
$ tmux attach {session name}
# 繼續之前的session, 並把其它開著的地方detach
$ tmux attach -d {session name}
# 如果不指定session name,會自動用ls的第一個
$ tmux attach
PS:prefix是[ctrl-b]
C+b c 開新視窗
C+b n 或 space 切換到下一個視窗
C+b P 切換到上一個視窗
以上是目前比較常用到的指令,有了tmux,再搭配郵件指令,就可以在家連回公司後,下好build code的指令,最後的結果會寄到信箱,如此只要一小時後便可以知道build complete。
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(264)

  • 個人分類:Tool
▲top
  • 12月 02 週日 201205:30
  • [C++] A *a 和 A *aa = new A 的差別

在寫C++過程中,指標的使用與操作是最頻繁被使用的,有些難解的bug,通常point佔絕大多數,這裡複習一個很基本的概念。
如下面的例子,個別使用兩個a指標,也各自呼叫他們的member function test(),發覺都可以印出test的字串,但為什麼第一個指標明明是指向undefine的空間,為什麼不會出現問題呢,不是應該要出現Segmentation Fault嗎?
這裡隱藏一個很重要,也很容易被誤解的觀念,通常使用null point或不知指向何處的point時,操作member function是不會發生Segmentation Fault的,會產生Segmentation Fault是在操作它的member時,如果下面的程式碼多加上一段a->value的話,當程式運行到這一行就會發生crash了。
 
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(145)

  • 個人分類:C++
▲top
  • 11月 12 週一 201209:12
  • [Aadroid] Android版本控制工具---Repo(轉)


Android 原始碼下載及版本控制 - 使用git與repo

要取得Android的原始碼,會需要用到Git和Repo還有Gerrit。 以下解釋一些工具,太冗長,可直接拉到最下方看如何取得Android原始碼。
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(10,164)

  • 個人分類:Repo
▲top
  • 11月 03 週六 201212:04
  • SyntaxHighlighter 測試

public class Hello {
public static int gvar;
public static void say(String s) {
int x = 10;
System.out.print(s+x);
}
public static void main(String[] argv) {
float y = 0;
say("Hello, world\n");
}
}
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(11)

  • 個人分類:
▲top
  • 11月 02 週五 201213:30
  • [Tool] Source Insight常用的快捷鍵

@Source Insight常用的快捷鍵:

Ctrl+= :Jump to definition
Alt+/ :Look up reference
Alt+分頁標題首字字母 : 切換至該標題的頁面
F3 : search backward
F4 : search forward
F5: go to Line
F7 :Look up symbols
F8 :Look up local symbols
F9 :Ident left
F10 :Ident right
Alt+, :Jump backword
Alt+. : Jump forward
Shift+F3 : search the word under cusor backward
Shift+F4 : search the word under cusor forward
F12 : incremental search
Shift+Ctrl+f: search in project
shift+F8 : hilight word
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(743)

  • 個人分類:Tool
▲top
  • 10月 28 週日 201207:21
  • [Vim]常用的技巧記錄

@VIM外掛安裝方式
透過github
(1)使用git submodule add  "要安裝plugin的路徑"   bundle/plugin-name
frank@frank:~/.vim$ git submodule add https://github.com/vim-scripts/taglist.vim.git bundle/Taglist  ./bundle/Taglist
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(131)

  • 個人分類:Vim
▲top
  • 10月 14 週日 201213:12
  • [C++]必須傳回物件時,別妄想傳回其reference

函數的回傳值使用上要非常的小心,雖然程式寫久了,這算是比較基礎的概念,但有時一疏忽,往往就會造成系統Crash,簡單來說,函式產生新物件的路徑有二,在Stack空間或是在Heap空間裡,以底下例子來說。


const Rational& operator* (const Rational& lhs,
const Rational& lhs)
{
Rational result(lhs.n * rhs.n, lhs.d* rhs.d)
return result;
}

 
此函式傳回一個指向local的物件,此物件在函式退出前就被銷毀了,若再針對此物件做處理,就會發生不可預期之錯誤。
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(318)

  • 個人分類:C++
▲top
  • 9月 22 週六 201213:32
  • [C++]寧以pass-by-reference-to-const取代pass-by-value

在C++裡函式參數使用pass-by-value的話,會造成參數的傳遞成本增加,所以在C++應用程式或是component開發上比較少使用pass-by-value。
 
在Google C++ Style Guide裡有提到Google內部使用C++ coding的規則,從裡面也可以看到Google的rule為所有函式的參數必須是pass-by-reference,並且加上cosnt,表示傳入的參數是不可以變動的,這時你可能會有個疑問,如果函式的實作需要修改到傳入的參數怎麼辦,當然這應該是很常見的case,所以他們對於有需要更改操作的arguments,可以使用pass-by-point的方式。
(繼續閱讀...)
文章標籤

cloudfly 發表在 痞客邦 留言(0) 人氣(6,366)

  • 個人分類:C++
▲top
12»

個人資訊

cloudfly
暱稱:
cloudfly
分類:
好友:
累積中
地區:

熱門文章

  • (3,809)[Linux] 遞迴搜尋文字-grep

文章分類

  • 程式設計 (1)
  • Flex (1)
  • Git (1)
  • Linux (1)
  • Vim (1)
  • Repo (1)
  • C++ (4)
  • Tool (2)
  • Android (5)
  • 未分類文章 (1)

最新文章

  • [Tool] 使用ccache可以加快build code的速度
  • [Android] RemoteView & AppWidget機制介紹
  • [Tool] Tmux(在家工作的好工具)
  • [C++] A *a 和 A *aa = new A 的差別
  • [Aadroid] Android版本控制工具---Repo(轉)
  • SyntaxHighlighter 測試
  • [Tool] Source Insight常用的快捷鍵
  • [Vim]常用的技巧記錄
  • [C++]必須傳回物件時,別妄想傳回其reference
  • [C++]寧以pass-by-reference-to-const取代pass-by-value

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: