好吧,我有一个带有两个后台任务(异步任务)的活动类,这两个类在两个单独的类中定义,例如
public class GettingBeaconsList extends AsyncTask<String, String, String>
public class GettingAirports extends AsyncTask<String, String, String>
在 MainClass* 中初始化并执行 *
public class MainClass extends Activity implements DelegateTaskCompleted
{
int ServiceBoolean = 0;
public OnClickListener LoadingBeaconList = new OnClickListener()
{
public void onClick(View v)
{
ServiceBoolean =1;
new GettingBeaconsList (context,MainClass.this).execute();
}
}
public OnClickListener LoadingAirportList= new OnClickListener()
{
public void onClick(View v)
{
ServiceBoolean =2;
new GettingAirports(context,MainClass.this).execute();
}
}
@Override
public void JsonArrayLoaded(JSONArray result)
{
// bla bla or whatever here i write, does not matter
if(ServiceBoolean == 1) {
// Load activity 5
}
else if( ServiceBoolean == 2)
{
// Load activity 6
}
else if( ServiceBoolean==3 )
{
// display Toast or Alert Box or load Activity number 8
}
}
}
现在在上面的代码MainClass.this中,该接口作为接口引用存储在这样的AsynTask子类中
private Context context = null;
private DelegateTaskCompleted delegate = null;
public GettingBeaconsList (Context context,DelegateTaskCompleted delegate)
{
this.context = context;
this.delegate = delegate;
}
// And constructor of second AsynTask is same as of First AsynTask Class
private Context context = null;
private DelegateTaskCompleted delegate = null;
public GettingAirports (Context context,DelegateTaskCompleted delegate)
{
this.context = context;
this.delegate = delegate;
}
每个AsynTask类或子类的onPostExecute,JSONArray返回或传递回调用类,如下所示。在这种情况下,调用类为
MainClass, 但其他活动类使用相同的AsynTask类( GettingBeaconsList 和
GettingAirports )
protected void onPostExecute(String file_url)
{
pDialog.dismiss();
delegate.JsonArrayLoaded(gotNearestbeacons);
}
现在,我在 MainClass中
有一个方法(JsonArrayLoaded)处理来自两个不同后台任务或服务的两个响应。我正在使用条件来确定执行了哪个服务/类或AsynTask。
但是我正在寻求解决这种情况的最佳方法,例如,如果将来我们有5个或更多的后台服务,并且它们也只返回JSON数组,那么我是否需要为每个服务创建单独的接口?
在这种情况下,面向对象的出路应该是什么?
我能想到的最简单的html" target="_blank">解决方案是修改DelegateTaskCompleted
界面,如下所示:
public interface DelegateTaskCompleted{
public void JsonArrayLoaded(AsyncTask<String, String, String> task,
JSONArray result);
}
然后,您onPostExecute
将自己发送回如下所示:
protected void onPostExecute(String file_url)
{
pDialog.dismiss();
delegate.JsonArrayLoaded(this, gotNearestbeacons);
}
最后,MainClass
您可以在中根据以下类型进行条件检查AsyncTask
:
@Override
public void JsonArrayLoaded(AsyncTask<String, String, String> task,
JSONArray result)
{
if(task instanceof GettingBeaconsList) {
// do stuff related to the beacon list
}
else if(task instanceof GettingAirports) {
// do airport list stuff
}
}
这样一来,您就可以轻松识别AsyncTask
通过响应发送的,而不必跟踪响应的时间(如果一个花费的时间比另一个花费的时间长)等。
或者,让另一个类扩展,AsyncTask
但添加一个抽象变量以进行标识。
public class TrackableAsyncTask extends AsyncTask<String, String, String>{
public abstract int getId();
public static final int ID_AIRPORT = 1;
public static final int ID_BEACONS = 2;
... etc
}
然后让您的机场和灯塔AsycTasks
扩展此范围。这将要求他们实施该getId
方法。
public class GettingAirports extends AsyncTask<String, String, String> {
public int getId(){
return ID_AIRPORT;
}
}
然后,if (task instanceof GettingAirports)
除了执行条件操作外,还可以执行以下switch
语句:
switch(task.getId()){
case TrackableAsyncTask.ID_AIRPORT:
// run airport code
}
希望这可以帮助。
后台主界面 1.菜单列表区 2.功能展示区 3.快捷工具区 4.官方链接,帮助区 5.风格切换区 6.主导航区
Celery 是一个 Python 的任务队列,包含线程/进程池。曾经有一个 Flask 的集成, 但在 Celery 3 重构了内部细节后变得不必要了。本指导补充了如何妥善在 Flask 中使用 Celery 的空白,但假设你已经读过了 Celery 官方文档中的教程 使用 Celery 的首要步骤 安装 Celery Celery 提交到了 Python Package Index (PyPI
你能告诉我在Android中做同步工作的正确方法是什么吗(例如,如果我有大约5个工作)<注意 我所说的同步作业是指在后台运行并通过Web服务发送一些数据(如分析)的线程。。。 有关更多详细信息,请阅读更详细的描述: 我的任务是实现一些后台作业,这些作业将使一些数据与restful web服务同步。一些作业应定期安排,并有特定的延迟。如果没有internet连接,我只需缓存数据,然后当连接再次出现时
我正在使用rxjava将一些任务上载到服务器,每当任务启动的片段或活动被销毁时,我都会处理订阅以避免内存泄漏,但我想要的是,即使在片段/活动被销毁后,我也需要继续在后台运行任务,有什么方法可以实现这一点吗? 实例 是否必须始终释放订阅?如果不是,何时使用dispose?
我有一个后台服务,每天下午1点打电话给我。下午1点,我的Firebase数据库中的3个值应设置为0。当用户启动某个活动时,会触发后台服务。如我所愿,值在下午1点重置为0,但每次下午1点后,当用户启动活动时,服务都会运行重置我的值。如何在下午1点将值重置为0,直到第二天下午1点才再次重置? 下面是我在服务类中的代码 这是启动服务的代码。此方法在此活动的oncreate方法中调用。
2024/9/26 15:00 - 自我介绍 - HashMap底层 - HashMap可以key为null吗? - 基本数据类型和包装数据类型区别 - ==和equal()区别 - 基本包装数据类型可以用==比较吗?这里我理解的是一个基本数据类型和包装数据类型之间不能用==比较,面试官可能想的不一样,他想问的是包装数据类型之间可否用==比较 - Runnable和Callable区别 - JVM