我想每秒调用以下代码部分? 我试过以下 - 但是不知道怎么称呼每一秒?
如何继续调用新checkNWConnectivity()。执行(“测试”); 每秒以及从哪里调用我的android程序???
private class checkNWConnectivity extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
ConnectivityManager manager = (ConnectivityManager)getSystemService(MainActivity.CONNECTIVITY_SERVICE);
// 3G confirm
Boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
// wifi confirm
Boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
if(is3g){
tvNWConnectivity.setText(" Connected to 3G");
}else if(isWifi){
tvNWConnectivity.setText(" Connected to wifi");
}else{
String text = " No Network Connectivity."+"\n" + " Uploading will be resumed from streamlet "+countStreamletUploaded.toString();
tvNWConnectivity.setText(text);
}
return null;
}
}
所以我的问题如何每秒调用一次? 其实我想继续在doInBackground中运行代码部分(String ... params){...}
答案 0 :(得分:3)
您想使用ScheduledExecutorService
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(command, initialDelay, period, unit);
创建活动的执行者OnCreate,开始执行onResume并将其停在onPause。
然后您可以调用runOnUiThread(action);
将操作发布回UI。
答案 1 :(得分:1)
Timer
答案 2 :(得分:1)
您可以使用TimerTask,Timer和Handler来执行此操作:
public void toCallAsynchronous() {
TimerTask doAsynchronousTask;
final Handler handler = new Handler();
Timer timer = new Timer();
doAsynchronousTask = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
handler.post(new Runnable() {
public void run() {
try {
checkNWConnectivity performBackgroundTask = new checkNWConnectivity();
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
timer.schedule(doAsynchronousTask, 0,30000); //put the time you want
}
答案 3 :(得分:0)
首先,您无法使用非UI线程中的视图,因此无法从TextView.setText
方法调用AsyncTask.doInBackground
。您只需使用Handler并使用Handler.sendMessageDelayed
答案 4 :(得分:0)
我这样做的方法是将线程放在服务
中该服务会从一个非常大的数字做一个倒数计时器,所以它永远不会变为零,但这只是我的应用程序的一个用例,你可能需要一些永远的东西
然后存在操纵UI线程的困境。我在服务中的循环将编辑SharedPreferences中的变量,我的Activity有一个循环检查SharedPreferences,如果SharedPreferences返回一定值,则会更新UI对象,问题解决了。
您可以使用广播接收器做类似的事情
答案 5 :(得分:0)
使用处理程序。
private class MyHandler extends Handler{
@Override
public void handleMessage(Message message){
YourAsyncTask task = new YourAsyncTask(...);
task.execute();
this.sendMessageDelayed(new Message(), 1000);}
}
然后当你想开始时就这样做
MyHandler handler = new MyHandler();
handler.sendMessageDelayed(new Message(), 1000);