Я часто получаю следующее 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();
}