禁止在前台活动的整理再执行异步任务 [英] Disabling Re-execution of Async Task on finishing of foreground activity

查看:98
本文介绍了禁止在前台活动的整理再执行异步任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

案例: 我使用的异步任务用于显示一些列表。当我点击列表视图中的任何项目的另一项活动涉及前台最后一项活动。这个前景活动包含一个完成按钮,通过它的前台活动结束。

Case: I am using Async Task for showing some list. When I click on any item of listview another activity comes foreground of last activity. This foreground activity contains a finish button through which the foreground activity finishes.

问题: 当我preSS完成按钮的前台活动结束,但具有异步任务的最后一项活动再次执行。

Problem: When i press finish button the foreground activity finishes but that last activity having the Async Task executes again.

需要: 我想,当我preSS Finish按钮则只有前台活动结束,并具有异步任务不能再次执行后台活动。因为它是开放的前景活动之前,这种背景下的活动必须是相同的。

Need: I want when i press finish button then only foreground activity finishes and background activity having Async Task must not execute again. That background activity must be same as it was before opening foreground activity.

编辑: 第一类具有非同步任务

First Class having Asynch Task

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.restaurant_detail);
    Intent i = getIntent();
    res_id = i.getStringExtra("id");
    gps = new GPSTracker(getApplicationContext());
    session = new SessionManagement(getApplicationContext());
    fillDatabase = new DatabaseHandler(getApplicationContext());
    fillDatabase.open();
    count = fillDatabase.fetchCount();
    SetUpViews();
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
    Date d = new Date();
    dayOfTheWeek = sdf.format(d);
    Log.i("WEEKDAY", dayOfTheWeek);
    imageLoader = new ImageLoader(getParent());
    progressDialog = ProgressDialog.show(getParent(), "", "Loading...");
    Log.v(String.valueOf(count), "count");
    // new MenuTask().execute();
    new DetailsTask().execute();


}
public class DetailsTask extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... arg0) {
        // Creating JSON Parser instance//////////
        JSONParser jParser = new JSONParser();
        // Getting JSON String from URL..............
        JSONObject jObject = jParser
                .getJSONFromUrl("http://smartaway.dk/json/rest_get_details.php?id="
                        + res_id);
        try {
            // /Getting array of Events.......
            details = jObject.getJSONArray(TAG_NODE);
            // / LOOping through AllEvents........
            for (int i = 0; i < details.length(); i++) {
                JSONObject e = details.getJSONObject(i);
                res_id = e.getString(TAG_ID);
                res_name = e.getString(TAG_RESNAME);
                logo = e.getString(TAG_RES_LOGO);
                name = e.getString(TAG_RESNAME);
                city_state = e.getString(TAG_CITY);
                street = e.getString(TAG_STREET);
                localityString = e.getString(TAG_LOCALITY);
                restype = e.getString(TAG_RESTYPE);
                Log.v(restype, "restype");
                lat = e.getString(TAG_LAT);
                Log.v(lat, "latitude");

                lng = e.getString(TAG_LNG);
                Log.v(lng, "longitude");
                cuisineString = e.getString(TAG_COUSINE);
                timingsString = e.getString(TAG_TIMING);
                // costString = e.getString(TAG_COSRTWO);

                res_des_String = e.getString(TAG_RES_DES);

                cardString = e.getString(TAG_CARDS);
                facilitiesString = e.getString(TAG_FACILITIES);

                parkingString = e.getString(TAG_PARKING);
                minorderString = e.getString(TAG_MINORDER);
                deliverychargesString = e.getString(TAG_DELIVERY_CHARGES);
                ratings = e.getString(TAG_RATING);
                smily = e.getString(TAG_SMILY);
                s_o_t = e.getString(TAG_S_O);
                s_c_t = e.getString(TAG_S_C);
                m_o_t = e.getString(TAG_M_O);
                m_c_t = e.getString(TAG_M_C);
                t_o_t = e.getString(TAG_T_O);
                t_c_t = e.getString(TAG_T_C);
                w_o_t = e.getString(TAG_W_O);
                w_c_t = e.getString(TAG_W_C);
                th_o_t = e.getString(TAG_TH_O);
                th_c_t = e.getString(TAG_TH_C);
                f_o_t = e.getString(TAG_F_O);
                f_c_t = e.getString(TAG_F_C);
                sat_o_t = e.getString(TAG_SAT_O);
                sat_c_t = e.getString(TAG_SAT_C);
                smily = e.getString(TAG_SMILY);

            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
        // progressBar.setVisibility(View.GONE);
        progressDialog.dismiss();
        detail.setVisibility(View.VISIBLE);
        imageLoader.DisplayImage(logo, reslogo);
        resname.setText(StringEscapeUtils.unescapeHtml(name));
        toptxt.setText(StringEscapeUtils.unescapeHtml(name));
        address.setText(StringEscapeUtils.unescapeHtml(street) + " \n"
                + StringEscapeUtils.unescapeHtml(localityString) + " "
                + StringEscapeUtils.unescapeHtml(city_state));
        cuisineString = (cuisineString.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(cuisineString));
        cuisine.setText(cuisineString);
        if (dayOfTheWeek.equalsIgnoreCase("monday")) {
            timings.setText(m_o_t + " - " + m_c_t);

        } else if (dayOfTheWeek.equalsIgnoreCase("tuesday")) {
            timings.setText(t_o_t + " - " + t_c_t);
        } else if (dayOfTheWeek.equalsIgnoreCase("wednesday")) {
            timings.setText(w_o_t + " - " + w_c_t);
        } else if (dayOfTheWeek.equalsIgnoreCase("thursday")) {
            timings.setText(th_o_t + " - " + th_c_t);
        } else if (dayOfTheWeek.equalsIgnoreCase("friday")) {
            timings.setText(f_o_t + " - " + f_c_t);
        } else if (dayOfTheWeek.equalsIgnoreCase("saturday")) {
            timings.setText(sat_o_t + " - " + sat_c_t);
        } else if (dayOfTheWeek.equalsIgnoreCase("sunday")) {
            timings.setText(s_o_t + " - " + s_c_t);
        }
        // costfortwo.setText(costString);
        res_des_String = (res_des_String.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(res_des_String));
        cardString = (cardString.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(cardString));
        parkingString = (parkingString.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(parkingString));
        facilitiesString = (facilitiesString.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(facilitiesString));
        minorderString = (minorderString.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(minorderString));
        deliverychargesString = (deliverychargesString.equals("") ? "Not present"
                : StringEscapeUtils.unescapeHtml(deliverychargesString));

        res_description.setText(res_des_String.replaceAll(
                "(\r\n\t|\n\t|\n|\t)", ""));
        cards.setText(cardString);
        facilities.setText(facilitiesString);

        parking.setText(parkingString);
        minoredr.setText(minorderString);
        delivery_charges.setText(deliverychargesString);
        if (ratings.equals("")) {
            rating.setVisibility(View.GONE);
        } else {
            DecimalFormat numberFormat = new DecimalFormat("##.##");
            rating.setText(numberFormat.format(Double.valueOf(ratings)));
        }
        if (smily.equals("1")) {
            smiley.setImageResource(R.drawable.happy_smile);
        } else if (smily.equals("0")) {
            smiley.setImageResource(R.drawable.sad_smile);
        } else {
            smileyLayout.setVisibility(View.GONE);
        }

    }
}

第二类具有Finish按钮

setContentView(R.layout.submenulist);

    Intent i = getIntent();
    main_menu = i.getStringExtra("id");
    res_id = i.getStringExtra("res_id");
    res_name = i.getStringExtra("res_name");
    Log.v("Main Menu Name", main_menu);
    fillDatabase = new DatabaseHandler(getApplicationContext());
    fillDatabase.open();
    count = fillDatabase.fetchCount();


    backButton = (Button) findViewById(R.id.finish);
    backButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            finish();
        }
    });



}

次活动有pressing的前台活动完成,但完成这样的背景下活动后打电话Acync任务再次执行按钮。如何reslove了。

Second activity have button on pressing that foreground activity finishes but after finishing that background activity call Acync Task to execute again. How to reslove that.

非常感谢

推荐答案

嗯,这是你使用Singleton类应该达到

Well this is something you should achieve using the singleton class

  1. 创建一个类说的DataManager

  1. Create a class say DataManager

public class DataManager {
public static DataManager dManager;

boolean isDataRecieved;

public static DataManager getInstance()
{
    if(dManager!=null)
        return dManager;

    else
        dManager=new DataManager();

    return dManager;
}

}

下面getInstance方法确保有这个类和布尔只有一个对象 isDataRecieved应尽快设置为true,因为数据被分析并存储起来。

here the getInstance method ensures there is only one object of this class and the boolean isDataRecieved should be set to true as soon as the data is parsed and stored.

就像你的AsyncTask的postExecute添加这些行

like on postExecute of your ASyncTask add these lines

Datamanager d=Datamanager.getInstance();
d.isDataRecieved=true;

现在的onCreate添加这些行

now on onCreate add these lines

Datamanager d=Datamanager.getInstance();
if(!d.isDataRecieved)
{
//This means data is not recieved 

execute your asynctask else not 
}

这篇关于禁止在前台活动的整理再执行异步任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆