gpt4 book ai didi

android - 制作线程循环的最佳方法?

转载 作者:行者123 更新时间:2023-11-29 22:01:35 25 4
gpt4 key购买 nike

我希望我的应用程序检查是否启用了移动数据

当您只点击一个按钮时,这工作正常,但它只会在点击后刷新一次信息,而不是“实时”自动刷新。

threadCheck = new Thread(new Runnable() {

public void run() {
// TODO Auto-generated method stub

try {
setTextfield(isMobileDataEnabled());
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

});



this.startbutton.setOnClickListener(new OnClickListener() {

public void onClick(View arg0) {

threadCheck.run();

}

});

使该线程“循环”的最好的、对 CPU 最友好的方法是什么?我尝试递归调用 isMobileDataEnabled(),但最终出现了 stackoverflow 错误。

真诚的,沃尔芬

最佳答案

我认为您最好的选择实际上是 ConnectivityManager 广播监听器。它会告诉您网络何时可用或不可用。注册广播并在监听器中更新您的按钮。这样就没有循环,你的 CPU 大部分时间都处于空闲状态。当网络发生变化时,它会通知您的广播公司而无需任何轮询。它非常快,所以我不用担心“实时”;)

这些应该可以帮助您入门。

http://developer.android.com/reference/android/net/ConnectivityManager.html

http://developer.android.com/reference/android/content/BroadcastReceiver.html

public class MyActivity extends Activity {

public void onCreate(Bundle b) {
mButton = (Button) findViewById(R.id.button);
registerReceiver(mBroadcastReceiver, new IntentFilter(ConnectivityMananger.CONNECTIVITY_ACTION));
.....
}
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
if (ConnectivityMananger.CONNECTIVITY_ACTION.equals(intent.getAction()) {
boolean connectionLost = !intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
mButton.setText("Network Enabled:" + ! connectionLost);
// or whatever else you want to callback.
}
}
};

关于android - 制作线程循环的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com