Android學習筆記

          我的Android之路
          posts - 13, comments - 3, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          2010年6月13日

          我們在Eclipse中經常使用Logcat窗口查看日志信息,不過其實也可以在手機上顯示日志。下面的例子就是在textview中顯示logcat日志。
          java代碼如下:
           1 
           2 package LogcatTextView.com;
           3 
           4 import java.io.BufferedReader;
           5 import java.io.IOException;
           6 import java.io.InputStreamReader;
           7 
           8 import android.app.Activity;
           9 import android.os.Bundle;
          10 import android.widget.ScrollView;
          11 import android.widget.TextView;
          12 
          13 public class LogcatTextView extends Activity {
          14     /** Called when the activity is first created. */
          15     @Override
          16     public void onCreate(Bundle savedInstanceState) {
          17         super.onCreate(savedInstanceState);
          18         setContentView(R.layout.main);
          19 
          20         try {
          21 
          22             Process process = Runtime.getRuntime().exec("logcat -d");
          23 
          24             BufferedReader bufferedReader = new BufferedReader(
          25 
          26             new InputStreamReader(process.getInputStream()));
          27 
          28             StringBuilder log = new StringBuilder();
          29 
          30             String line;
          31 
          32             while ((line = bufferedReader.readLine()) != null) {
          33 
          34                 log.append(line);
          35 
          36             }
          37 
          38             TextView tv = (TextView) findViewById(R.id.tvLogcat);
          39 
          40             tv.setText(log.toString());
          41 
          42             final ScrollView scrollView = (ScrollView) findViewById(R.id.scrlLogcat);
          43 
          44             scrollView.post(new Runnable() {
          45                 @Override
          46                 public void run() {
          47                     scrollView.fullScroll(ScrollView.FOCUS_DOWN);
          48                 }
          49             });
          50 
          51         } catch (IOException e) {
          52 
          53         }
          54     }
          55 }
          不要忘記加上權限
          <uses-permission android:name="android.permission.READ_LOGS" />

          posted @ 2011-03-09 13:44 andteamroid 閱讀(5705) | 評論 (3)編輯 收藏

              當你在后臺使用Thread或者AsyncTask來處理一些耗時的操作時,可能想要對這些線程加以控制,其中包括中斷線程。

              很多情況下,當用戶啟動程序的時候,一個后臺運行的線程會同時啟動去加載內容。但是,當用戶離開程序時,線程應該被打斷,因為現在用戶已經不再關注程序了,同時也不再關注線程處理的結果,而線程是要占用系統的資源的,如果不及時中斷線程,會導致系統資源的浪費。

              可是怎么去中斷一個線程呢?從文檔中可以看到Thread類有stop()方法,這個方法提供一個“簡單”的方法去中斷線程。不過這種野蠻的中斷方式會導致一些問題,而且現在這個方法已經不推薦使用了。

              除此之外,你可以使用Thread.interrupt()或者AsyncTask.cancel()方法,但是這不會馬上中斷線程,因此,只能在自己的線程中實現中斷并退出。

              在許多情況下,后臺運行的線程都有一個主循環,因此你可以在循環中判斷線程是否被中斷,若被中斷,則退出循環,從而結束進程。例如一個線程下載線程,可以通過isInterrupted()方法判斷當前線程是否被中斷。

          thread = new Thread() {
            
          public void run() {
              
              
          while(!isInterrupted() && hasMoreDataToDownload()){
                downloadAndWriteSomeMore();
              }
              
          if(isInterrupted()){
                deleteThePartiallyDownloadedFile();
              }
          else{
                callBack();
              }
            }
          }
          thread.start();
          thread.interrupt();

           

              如果線程被中斷,則調用deleteThePartiallyDownloadedFile()函數,刪除沒有完成下載的文件。當線程沒有被中斷,則調用callBack()函數,可以使用handler發送下載完成的信息。

              如果你的線程中沒有這樣一個主循環,例如只是執行一個很耗時的SQL查詢操作,可以在查詢操作之后調用 isInterrupted()來判斷是否需要結束線程。

              文章翻譯自:http://www.helloandroid.com/tutorials/interruptingcancelling-threads

          posted @ 2011-03-09 12:53 andteamroid 閱讀(5377) | 評論 (0)編輯 收藏

          在Android中,目前,我知道有兩種出現鋸齒的情況。 ① 當我們用Canvas繪制位圖的時候,如果對位圖進行了選擇,則位圖會出現鋸齒。 ② 在用View的RotateAnimation做動畫時候,如果View當中包含有大量的圖形,也會出現鋸齒。我們分別以這兩種情況加以考慮。 ◆ 用Canvas繪制位的的情況。在用Canvas繪制位圖時,一般地,我們使用drawBitmap函數家族,在這些函數中,都有一個Paint參數,要做到防止鋸齒,我們就要使用到這個參數。如下:首先在你的構造函數中,需要創建一個Paint。 Paint mPaint = new Paint(); 然后,您需要設置兩個參數: 1)mPaint.setAntiAlias(); 2)mPaint.setBitmapFilter(true)。第一個函數是用來防止邊緣的鋸齒,第二個函數是用來對位圖進行濾波處理。最后,在畫圖的時候,調用drawBitmap函數,只需要將整個Paint傳入即可。 ◆ 有時候,當你做RotateAnimation時,你會發現,討厭的鋸齒又出現了。這個時候,由于你不能控制位圖的繪制,只能用其他方法來實現防止鋸齒。另外,如果你畫的位圖很多。不想每個位圖的繪制都傳入一個Paint。還有的時候,你不可能控制每個窗口的繪制的時候,您就需要用下面的方法來處理——對整個Canvas進行處理。 1)在您的構造函數中,創建一個Paint濾波器。 PaintFlagsDrawFilter mSetfil = new PaintFlagsDrawFilter(0, Paint.FILTER_BITMAP_FLAG);第一個參數是你要清除的標志位,第二個參數是你要設置的標志位。此處設置為對位圖進行濾波。 2)當你在畫圖的時候,如果是View則在onDraw當中,如果是ViewGroup則在dispatchDraw中調用如下函數。 canvas.setDrawFilter( mSetfil ); ★ 最后,另外,在Drawable類及其子類中,也有函數setFilterBitmap可以用來對Bitmap進行濾波處理,這樣,當你選擇Drawable時,會有抗鋸齒的效果。

          posted @ 2010-10-22 17:01 andteamroid 閱讀(3264) | 評論 (0)編輯 收藏

          好不容易折騰好了sdk,自然要把adb用起來,但是我打開終端輸入adb devices,得到的卻是如下內容:

          ???????????? no permissions

          乍一看好像需要root權限,可是輸入sudo adb devices,還是不行,上網研究了一下,原來最開始啟動adb的時候要有root權限,然后就隨便了,如果一開始忘記了加sudo,就必須先終止adb,然后重來,過程如下:

          $ adb kill-server
          $ sudo adb start-server
          $ adb devieces

          看看是不是可以得到設備信息了?我的機器是G1,不過所有android系統的機器應該都一樣的。

          另外,如果你向我一樣把sdk的目錄寫進了當前用戶的PATH設置,但是root用戶的PATH里沒有,那么第二步會提示command not found,只要換成如下命令就行了:

          $ sudo /sdk安裝目錄/tools/adb start-server


          轉自:http://alfred.bt4.org/archives/384

          posted @ 2010-06-13 00:30 andteamroid 閱讀(581) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 合山市| 河间市| 九江市| 黄石市| 萍乡市| 中超| 涞水县| 错那县| 霸州市| 清流县| 香港 | 文昌市| 柘城县| 类乌齐县| 巴彦淖尔市| 曲麻莱县| 满城县| 霸州市| 温泉县| 和田县| 东乡族自治县| 湖州市| 关岭| 孟连| 汉川市| 甘肃省| 城口县| 洞头县| 金沙县| 新建县| 新平| 奉化市| 永川市| 辉南县| 平南县| 视频| 时尚| 乌兰浩特市| 兴业县| 陆川县| 瑞丽市|