如何将一个界面用于不同的后台android任务?

问题描述 投票:10回答:6

嗯,我有一个带有两个后台任务(Async-Task)的活动类,它们已在两个单独的类中定义,例如

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类(GettingBeaconsListGettingAirports]

protected void onPostExecute(String file_url)   
{           
    pDialog.dismiss();      
    delegate.JsonArrayLoaded(gotNearestbeacons);
}

现在我在MainClass中有一个方法(JsonArrayLoaded)处理来自两个不同后台任务或服务的两个响应。我正在使用条件找出执行哪个服务/类或AsynTask。

但是我要求最好的方法来解决这种情况,例如将来我们有5个或更多的后台服务,并且它们也只返回一个JSON数组,所以我需要为每个服务创建单独的接口吗?

在这种情况下,什么是面向对象的出路?

java android oop interface android-asynctask
6个回答
7
投票

我能想到的最简单的解决方案是修改DelegateTaskCompleted接口,如下所示:


13
投票

这是回调的接口


6
投票

您也可以考虑使用Handler来实现这一目标。在活动中创建处理程序,将此处理程序对象传递给每个AsyncTask。在onPost调用handler.sendEmptyMessage(CONSTANT_INT);在处理程序中handleMessage检查msg.what in if或switch这样,将仅创建一个处理程序对象并在多个对象中使用要求从一项活动中进行异步处理


6
投票

如果我正确理解了您的问题,您已经将AsyncTask扩展了很多次。这些子类的每个目标都是将JSONArray传递给实现DelegateTaskCompleted的Activity,在其中您将对其进行处理。挑战在于,您要对此JSONArray执行的“操作”因生成AsyncTask的不同而有所不同。


4
投票

向两个AsyncTask类即一个成员添加一个成员变量,>

public class GettingBeaconsList extends AsyncTask<String, String, String> 
public class GettingAirports extends AsyncTask<String, String, String> 

0
投票

我建议您仅将n

© www.soinside.com 2019 - 2024. All rights reserved.