gpt4 book ai didi

android - 在 android asyncTask 中重复运行 doInBackground

转载 作者:行者123 更新时间:2023-11-29 21:12:20 25 4
gpt4 key购买 nike

我想在特定的时间间隔内重复从数据库中获取用户,然后在 UI 上对他们做一些事情。我知道 asynchTask 只能执行一次,但我希望它重复运行以获取新的用户数据。我想知道有没有办法做到这一点,即在特定时间间隔后重复获取用户,然后在 UI 上对他们做一些事情???这是有效的代码吗..

while(true) {
new plottingTask().execute("");
Thread.sleep(10000);
}

最佳答案

检查这个问题:How to execute Async task repeatedly after fixed time intervals

已经问过好几次了。

无限循环不是一个好方法!

如果您希望在 Activity 处于后台/或未运行时获取数据,Service 将是更好的方法。

public class MyService extends Service {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);

MyAsyncTask MyTask = new MyAsyncTask ();
MyTask.execute();

return Service.START_STICKY; // if android our the user kills the Service it will restart
}
}

private class MyAsyncTask extends AsyncTask<String, Void, String> {


@Override
protected String doInBackground(String... params) {
// do your long/network operation
}

@Override
protected void onPostExecute(String result) {

// send Intent to BroadcastReceiver in MainActivity.class to know the service finished its task once
Intent finished = new Intent("yourPackage.DOWNLOADCOMPLETE");
sendBroadcast(finished);
}

@Override
protected void onPreExecute() {
}

@Override
protected void onProgressUpdate(Void... values) {
}
}
}

在您的 MainActivity 中添加一个 BroadcastReceiver:

@Override
public void onPause() {
super.onPause();
unregisterReceiver(receiver);
}

public void onResume() {
super.onResume();

IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
}

// notify when operation in Service finished
private ResponseReceiver receiver;

public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP = "yourPackage.DOWNLOADCOMPLETE";

@Override
public void onReceive(Context context, Intent intent) {

// do stuff if Service finished its task at least once
}
}

使用 AlarmManager 每 60 秒启动一次 Servive:

// refresh every 60 seconds in MyService.java
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);

AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// Start every 60 seconds
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60*1000, pintent);

startService(intent);

在您的 AndroidManifest.xml 中,您必须注册该服务:

<service
android:enabled="true"
android:name=".MyService"
android:label="your Service Name">
</service>

android:label="your Service Name" 如果您导航到 android 中正在运行的应用程序,将显示。

关于android - 在 android asyncTask 中重复运行 doInBackground,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423850/

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