gpt4 book ai didi

android - 输入调度超时 ANR

转载 作者:行者123 更新时间:2023-12-02 02:59:23 29 4
gpt4 key购买 nike

我的应用程序中经常出现以下 ANR

Input dispatching timed out (Waiting to send key event because the focused window has not finished processing all of the input events that were previously delivered to it. Outbound queue length: 0. Wait queue length: 1.)

日志说 中的问题onActivityStopped 方法

这是我在此方法中添加的代码
try {
boolean foreground = new ForegroundCheckTask().execute(getApplicationContext()).get();
if(!foreground) {

AdServerManager.getInstance().incrementImpression(activity, ForSaleDataManager.getInstance().getBannerImpression(),
ForSaleDataManager.getInstance().getOfferImpression(), new View.OnClickListener() {
@Override
public void onClick(View v) {

ForSaleDataManager.getInstance().clearOfferImpression();
ForSaleDataManager.getInstance().clearBannerImpression();
}
});

String lastOffers = TextUtils.join("," , ForSaleDataManager.getInstance().getVisitedOffersIds());
//Appboy.getInstance(activity).getCurrentUser().setCustomUserAttribute(AppBoyAttributeName.LAST_TEN_OFFER_IDS.getValue() , lastOffers);
ForSaleDataManager.getInstance().clearVisitedOffersIds();

String lastCategories = TextUtils.join("," , ForSaleDataManager.getInstance().getVisitedCategoriesIds());
//Appboy.getInstance(activity).getCurrentUser().setCustomUserAttribute(AppBoyAttributeName.LAST_TEN_CATEGORY_IDS.getValue() , lastCategories);
ForSaleDataManager.getInstance().clearVisitedCategoriesIds();

String lastSearch = TextUtils.join("," , ForSaleDataManager.getInstance().getVisitedSearchTerms());
//Appboy.getInstance(activity).getCurrentUser().setCustomUserAttribute(AppBoyAttributeName.LAST_TEN_SEARCH_TERMS.getValue() , lastSearch);
ForSaleDataManager.getInstance().clearVisitedSearchTerms();

// clear landing page
PhoneUtils.addBooleanToSharedPreference(activity, ForSaleConstants.IS_CATEGORIES_LANDING_SHOWEN, false);
PhoneUtils.addBooleanToSharedPreference(activity, ForSaleConstants.IS_LISTING_LANDING_SHOWEN, false);
PhoneUtils.deleteWithPrefixFromSharedPreference(activity, ForSaleConstants.IS_SUB_CATEGORIES_LANDING_SHOWEN_PREFIX, false);
PhoneUtils.deleteWithPrefixFromSharedPreference(activity, ForSaleConstants.IS_SUB_CATEGORIES_LANDING_SHOWEN, false);


// reset for last activity
PhoneUtils.addBooleanToSharedPreference(activity, ForSaleConstants.SET_LAST_ACTIVITY_CALLED, false);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

我的应用程序的系统要求是我必须向服务器发送一些数据并清除本地数据,所以我实现了接口(interface) Application.ActivityLifecycleCallbacks

谁能建议如何在不产生 ANR 的情况下满足我的系统要求?

编辑

这是我将其放入 AsyncTask 后的代码,但它不起作用
@Override
public void onActivityStopped(final Activity activity) {

//new AsyncTask<Void, Void, Void>() {

//@Override
//protected Void doInBackground(Void... voids) {

try {
boolean foreground = new ForegroundCheckTask().execute(getApplicationContext()).get();
if(!foreground) {

AdServerManager.getInstance().incrementImpression(activity, ForSaleDataManager.getInstance().getBannerImpression(),
ForSaleDataManager.getInstance().getOfferImpression(), new View.OnClickListener() {
@Override
public void onClick(View v) {

ForSaleDataManager.getInstance().clearOfferImpression();
ForSaleDataManager.getInstance().clearBannerImpression();
}
});

String lastOffers = TextUtils.join("," , ForSaleDataManager.getInstance().getVisitedOffersIds());
//Appboy.getInstance(activity).getCurrentUser().setCustomUserAttribute(AppBoyAttributeName.LAST_TEN_OFFER_IDS.getValue() , lastOffers);
ForSaleDataManager.getInstance().clearVisitedOffersIds();

String lastCategories = TextUtils.join("," , ForSaleDataManager.getInstance().getVisitedCategoriesIds());
//Appboy.getInstance(activity).getCurrentUser().setCustomUserAttribute(AppBoyAttributeName.LAST_TEN_CATEGORY_IDS.getValue() , lastCategories);
ForSaleDataManager.getInstance().clearVisitedCategoriesIds();

String lastSearch = TextUtils.join("," , ForSaleDataManager.getInstance().getVisitedSearchTerms());
//Appboy.getInstance(activity).getCurrentUser().setCustomUserAttribute(AppBoyAttributeName.LAST_TEN_SEARCH_TERMS.getValue() , lastSearch);
ForSaleDataManager.getInstance().clearVisitedSearchTerms();

// clear landing page
PhoneUtils.addBooleanToSharedPreference(activity, ForSaleConstants.IS_CATEGORIES_LANDING_SHOWEN, false);
PhoneUtils.addBooleanToSharedPreference(activity, ForSaleConstants.IS_LISTING_LANDING_SHOWEN, false);
PhoneUtils.deleteWithPrefixFromSharedPreference(activity, ForSaleConstants.IS_SUB_CATEGORIES_LANDING_SHOWEN_PREFIX, false);
PhoneUtils.deleteWithPrefixFromSharedPreference(activity, ForSaleConstants.IS_SUB_CATEGORIES_LANDING_SHOWEN, false);


// reset for last activity
PhoneUtils.addBooleanToSharedPreference(activity, ForSaleConstants.SET_LAST_ACTIVITY_CALLED, false);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}

//return null;
// }
//}.execute();


}

最佳答案

将所有这些逻辑移到后台线程中。这就是您解决来自您的代码的任何 ANR 的方法。

关于android - 输入调度超时 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47267686/

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