Android学习笔记

我的Android之路
posts - 13, comments - 3, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2011年3月9日

我们在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 阅读(5687) | 评论 (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 阅读(5368) | 评论 (0)编辑 收藏