【发布时间】:2018-04-26 08:00:06
【问题描述】:
我的应用程序中经常出现以下 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();
}
我的应用程序的系统要求,我必须向服务器发送一些数据并清除本地数据,因此我实现了接口 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();
}
【问题讨论】:
标签: android android-anr-dialog