0
我有这个ToggleButton,当某个条件(网站内容)为true时启用。Android StrictMode:这个示例的错误肯定或错误?
getSystemOnState(..)连接到一个网络服务器,这会导致由于严格模式的异常。我使用Handler类的方式有什么问题?
public class ReceiverToggleButton extends ToggleButton {
private Runnable mTicker;
private Handler mHandler;
private boolean mTickerStopped = false;
private String rxhost = null;
private Context context = null;
public ReceiverToggleButton(Context context) {
super(context);
this.context = context;
updateOnOffState(context);
}
private void updateOnOffState(final Context cxt) {
Runnable r = new Runnable() {
public void run() {
rxhost = cxt.getResources().getString(R.string.host_receiver);
mHandler = new Handler();
mTicker = new Runnable() {
public void run() {
if (mTickerStopped) {
return;
}
boolean isSystemOn = getSystemOnState(rxhost); // connects to webserver
setChecked(isSystemOn);
invalidate();
long now = SystemClock.uptimeMillis();
long next = now + 1000 * 10; // check every 10s
mHandler.postAtTime(this, next);
}
};
mHandler.post(mTicker);
}
};
new Thread(r).start();
}
}
谢谢!现在,我只是想知道我怎么会正确使用处理程序 - 我用这个[教程](http://www.vogella.com/articles/AndroidPerformance/article.html#concurrency_asynchtask),我看不到我在做什么不同。 – PhilW 2012-07-21 16:23:48
是的。我想这种方式很有效,但不是很干净。根据我的经验,当你有两个类(通常在不同的线程中)需要彼此交谈时,处理程序很好。例如,MusicService尝试将更新发送回活动。 (另一种方式可以只使用一个IntentService)所以我想我只通过单向的小信息(通常是ID)进行通信并且执行一些动作,取得了巨大的成功。 – 2012-07-21 16:29:09
这与我的用例(不是发布的,但是相同的应用程序)稍有不同。我有一个显示当前在远程系统上播放的歌曲(通过HTTP查询的XBMC)的文本视图。因此,每隔N秒我想查询XBMC并显示歌曲的名称。我目前的方法是现在的AsyncTasks,使用java.util.TimerTasks进行计划 - 我会看看是否可行。 – PhilW 2012-07-21 16:37:01