import java.util.Timer;
import java.util.TimerTask;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.StatFs;
import android.os.SystemProperties;
import android.util.Log;
public class SpaceObserver {
private static SpaceObserver instance = null;
private boolean startflag;
private Timer timer;
private TimerTask timerTask;
private Handler handler;
private long size;
public static final int OBSERVER_DATA_LOG_SIZE = 1;
public static final String LOG_PATH = "/data";
public static final int OBSERVER_INTERVAL = 60 * 1000;
public static final int DATA_LOG_MAX_SIZE = 30 * 1024 * 1024;
public class ObserverTask extends TimerTask{
@Override
public void run() {
// TODO Auto-generated method stub
Log.e("cqupt_chen", "in the timertask");
Message message = new Message();
message.what = SpaceObserver.OBSERVER_DATA_LOG_SIZE;
handler.sendMessage(message);
}
}
private SpaceObserver()
{
this.startflag = false;
this.timer = new Timer();
this.handler = new Handler(Looper.myLooper()){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
switch (msg.what) {
case SpaceObserver.OBSERVER_DATA_LOG_SIZE:
StatFs fileStats = new StatFs(SpaceObserver.LOG_PATH);
size = fileStats.getAvailableBlocks() * fileStats.getBlockSize();
Log.e("caupt_chen", "current data/log size " + size);
if (size <= SpaceObserver.DATA_LOG_MAX_SIZE) {
SystemProperties.set(Prefs.SYSTEM_PROPERTY, Prefs.DISABLE_OFFLINE);
}
break;
default:
break;
}
super.handleMessage(msg);
}
};
}
public static synchronized SpaceObserver getInstance()
{
if (instance == null) {
instance = new SpaceObserver();
return instance;
}
return instance;
}
public synchronized boolean getStartflag() {
return startflag;
}
private synchronized void setStartflag(boolean startflag) {
this.startflag = startflag;
}
public synchronized void start() {
if (this.startflag) {
return;
}
setStartflag(true);
timerTask = new ObserverTask();
timer.schedule(timerTask, 0, SpaceObserver.OBSERVER_INTERVAL);
}
}
SpaceObserver简单使用了一下单例模式.设置了一个标志位防止重复start线程来进行observer
import android.os.Looper;
import android.util.Log;
public class SpaceObserverThread extends Thread {
private SpaceObserver observer;
@Override
public void run() {
// TODO Auto-generated method stub
Log.e("cqupt_chen", "start observer thread");
Looper.prepare();
observer = SpaceObserver.getInstance();
observer.start();
super.run();
Looper.loop();
}
}
加入和handler和looper做了一些消息处理