2014年12月18日 星期四

Android 資料列表Loading過久 程式優化心得

原本的資料列表使用ScrollView,用addview的方式一個個加入每筆資料

資料較少時沒有什麼問題,但是當資料量增加後,前置Loading時間將近10秒之久

且沒有辦法把在資料同步的非同步處理程序(async)顯示Loading ,是UI Thread卡住的問題

解法:

步驟稍微繁瑣,僅敘述流程:

1.將scrollview改為ListView顯示,可以解決第一次進入時Loading的問題



2.ListView滑動會有Lag問題(使用SimpleAdapter),改用BaseAdapter

3.BaseAdapter結合ViewHolder,並把setText一類負擔較重的程式碼加入在
if(convertView == null) 的判斷示裡面

4.在getView裡面把原本該做的畫面調整事項都加進來,字型修正請改為
tf = Typeface.createFromAsset(context.getAssets(), "fonts/example.ttf");
並放置於
public MyBaseAdapter(Context context, ArrayList<RecordListData> myList){
tf = Typeface.createFromAsset(context.getAssets(), "fonts/example.ttf");
}


2014年12月3日 星期三

awk 分析 log 語法

為了分析mail當中擷取一些特定ip的內容出來 並想做統計

順便學一下awk基本的技巧

這篇大陸人寫的教學非常清楚,也是本篇主要文獻

在命令列直接下
# awk '{ print }' /etc/passwd

可以直接印出passwd的內容

# awk '{ print "hiya" }' /etc/passwd

每一行印出一個hiya

# awk -F":" '{ print $1 }' /etc/passwd

以冒號":" 為區隔 印出第一個區隔內的變數



外部腳本:
# awk -f myscript.awk /var/log/maillog

調用外部腳本myscript.awk , 分析maillog

腳本內容:

______________________________________________________
BEGIN {
FS=" "
}
{ print $1 }

begin是起始執行區段,可以放一些初始設定值
FS就是區隔變數,這邊我用空白
所以這個腳本可以印出每一行的第一個空白區分出的變數
______________________________________________________
BEGIN {
FS=" "
}

$7 == "Login:" { print $8 }

每一行用空白區隔的第七筆資料是"Login:"時,印出第八筆資料
awk 提供了完整的比較運算符集合,包括 "=="、"<"、">"、"<="、">=" 和 "!="。另外,awk 還提供了 "~" 和 "!~" 運算符,它們分別表示「匹配」和「不匹配」。
______________________________________________________
{
if($7 == "Login:")
{
print $8
}
}

用if 寫,功能與上一段程式相同
______________________________________________________
{
if($7 == "Login:")
   {
   if($10 != "rip=60.248.95.230,")
      {
      print $8 " " $10
      }
}
}

當第七變數是"Login:" 且第10變數不等於"rip=60.248.95.230,"
就印出來