Intereting Posts
SetRequestProperty throwing java.lang.IllegalStateException: невозможно установить свойство запроса после подключения Android: Как постоянно обновлять / передавать значения из одной активности в другую? Показать GIF-файл с помощью Glide (библиотека загрузки изображений и кеширования) Как проверить версию ОС Android bluestacks Emulator Изменение размера изображения до полной ширины и фиксированной высоты с помощью Picasso Одновременно используйте один фрагмент в ViewPager Android APK Certificates – какие поля необходимы, и что, если эта информация изменится? Android: не удается разрешить метод findViewById (int) в AsyncTask Почему элементы исчезают, когда я просматриваю listView? Android Lint не показывает перевод Отсутствие ошибок Как идентифицировать кнопку, нажатую из динамически созданной таблицы Вложение Cordova WebView, приемник не зарегистрирован Анимированное изображение обрезано Загрузка файла размером 16 КБ в Android занимает 35 секунд? Получить текущее местоположение в onMapReady в android с помощью API местоположений google

Приостановка потоков при запуске нескольких AsyncTasks во вложенных фрагментах и ​​медленное приложение

Здесь я TabLayout веб-службы во вложенных фрагментах, которые имеют TabLayout и ViewPager используя AsyncTask . Я пробовал AsyncTasks , вызывая их все в методе onResume каждого Fragment как:

 new FetchAllData(getActivity()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

а также

 new FetchAllData(getActivity()).execute(); 

Все в порядке, но у меня много проблем

  • Приложение перестает работать без какого-либо диалога, но оно показывает suspending all threads в logcat.

  • Когда мы приходим к этому фрагменту (который имеет вложенные tablayouts и viewpagers) из другого действия, которое отображается на изображении, все становится пустым, за исключением панели инструментов в течение 3-5 секунд. И внезапно они приходят с полными данными.

  • Когда мы называем этот фрагмент из другого фрагмента той же активности, он замерзает там, и эти фрагменты вскрываются внезапно там.

Надеюсь, вы получили мои проблемы, если не сообщите мне.

Stacktrace:

 1-29 12:10:49.580 10853-10863/com.cws.advisorymandi W/art: Suspending all threads took: 10.409ms 01-29 12:10:49.707 10853-10853/com.cws.advisorymandi D/cr_Ime: [InputMethodManagerWrapper.java:27] Constructor 01-29 12:10:49.711 10853-10853/com.cws.advisorymandi D/cr_Ime: [ImeAdapter.java:241] attach 01-29 12:10:49.711 10853-10853/com.cws.advisorymandi W/art: Attempt to remove local handle scope entry from IRT, ignoring 01-29 12:10:49.716 10853-10853/com.cws.advisorymandi W/AwContents: onDetachedFromWindow called when already detached. Ignoring 01-29 12:10:49.717 10853-10853/com.cws.advisorymandi D/cr_Ime: [InputMethodManagerWrapper.java:56] isActive: false 01-29 12:10:49.726 10853-10853/com.cws.advisorymandi W/art: Attempt to remove local handle scope entry from IRT, ignoring 01-29 12:10:49.726 10853-10853/com.cws.advisorymandi W/art: Attempt to remove local handle scope entry from IRT, ignoring 01-29 12:10:49.812 10853-10853/com.cws.advisorymandi D/cr_Ime: [ImeAdapter.java:241] attach 01-29 12:10:49.832 10853-10853/com.cws.advisorymandi D/cr_Ime: [ImeAdapter.java:241] attach 01-29 12:10:49.833 10853-10853/com.cws.advisorymandi I/Choreographer: Skipped 58 frames! The application may be doing too much work on its main thread. 01-29 12:10:50.075 10853-10853/com.cws.advisorymandi W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 10853 01-29 12:10:50.610 10853-10863/com.cws.advisorymandi W/art: Suspending all threads took: 43.636ms 01-29 12:10:50.621 10853-10853/com.cws.advisorymandi I/Ads: Scheduling ad refresh 60000 milliseconds from now. 01-29 12:10:50.630 10853-10853/com.cws.advisorymandi I/Ads: Ad finished loading. 

Fragment.java

 public class IndicesFragment extends android.support.v4.app.Fragment implements SwipeRefreshLayout.OnRefreshListener { public static String imagepath = null; public static FetchAllData myTask; static ArrayList<EquityDetails> catListDao = new ArrayList<EquityDetails>(); static ArrayList<EquityDetails> catListDao1 = new ArrayList<EquityDetails>(); static int count = 0; static int count1 = 0; ListView list; ImageView progressBar; View view; Activity act; AdvisorsAdapter adapter; TextView empty_text; AnimatorSet set; JSONArray jsonArray; SwipeRefreshLayout swipeRefreshLayout; private boolean isViewShown = false; public static IndicesFragment newInstance() { return new IndicesFragment(); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { isViewShown = true; if (adapter != null) { adapter.filter(""); } } else { isViewShown = false; } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.equity_activity, container, false); act = this.getActivity(); Constants.check_fragment_visible = 1; count++; setHasOptionsMenu(true); list = (ListView) view.findViewById(R.id.list_equity); empty_text = (TextView) view.findViewById(R.id.empty); swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_refresh_layout); progressBar = (ImageView) view.findViewById(R.id.progressBar); set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.fadein); set.setTarget(progressBar); progressBar.setVisibility(View.GONE); if (Utils.isNetworkAvailable(getActivity())) { if (catListDao.size() > 0) { adapter = new AdvisorsAdapter(act, R.layout.custom_equity, catListDao, 0); list.setAdapter(adapter); } else { if (!isViewShown) { new FetchAllData(getActivity(), 3).execute(); } } } else { CustomToast toast = new CustomToast(getActivity(), "There is no internet connection!"); } swipeRefreshLayout.setOnRefreshListener(this); return view; } public void onActivityCreated(Bundle savedInstanceState1) { super.onActivityCreated(savedInstanceState1); } @Override public void onResume() { super.onResume(); Constants.check_fragment_visible = 1; if (Constants.check_reload) { if (Utils.isNetworkAvailable(getActivity())) { new FetchAllData(getActivity(), 3).execute(); } else { CustomToast toast = new CustomToast(getActivity(), "There is no internet connection!"); } } if (adapter != null) adapter.notifyDataSetChanged(); } @Override public void onRefresh() { if (Utils.isNetworkAvailable(getActivity())) { new FetchAllData(getActivity(), 3).execute(); } else { CustomToast toast = new CustomToast(getActivity(), "There is no internet connection!"); } } public void doChange(String qeryText) { if (qeryText != null) { if (adapter != null) adapter.filter(qeryText); } } public void parseJSON(String result) { if (result != null) { JSONObject jsonObject; try { catListDao = new ArrayList<EquityDetails>(); jsonObject = new JSONObject(result); jsonArray = jsonObject.getJSONArray("list"); Log.d("Length ", "" + jsonArray.length()); for (int i = 0; i < jsonArray.length(); i++) { EquityDetails allDirectory = new EquityDetails(); allDirectory.setEntry_value(jsonArray.getJSONObject(i).getString("entry")); String value1 = jsonArray.getJSONObject(i).getString("entry"); String value2 = jsonArray.getJSONObject(i).getString("tgt_1"); allDirectory.setSerial_value(jsonArray.getJSONObject(i).getString("sl")); allDirectory.setTg_value1(jsonArray.getJSONObject(i).getString("tgt_1")); allDirectory.setTg_value2(jsonArray.getJSONObject(i).getString("tgt_2")); allDirectory.setPosted_by(jsonArray.getJSONObject(i).getString("posted_by")); allDirectory.setMainTitle_value(jsonArray.getJSONObject(i).getString("script")); allDirectory.setMain_subTitle_value(jsonArray.getJSONObject(i).getString("exchange")); allDirectory.setRating_value(jsonArray.getJSONObject(i).getString("rating")); allDirectory.setReview_value(jsonArray.getJSONObject(i).getString("review")); imagepath = jsonArray.getJSONObject(i).getString("advisor_image"); Log.d("Comminh Image ", "" + jsonArray.getJSONObject(i).getString("advisor_image")); allDirectory.setImage1(jsonArray.getJSONObject(i).getString("advisor_image")); allDirectory.setImage2(jsonArray.getJSONObject(i).getString("script_image")); allDirectory.setBuy(jsonArray.getJSONObject(i).getString("buy_sentiment")); allDirectory.setSell(jsonArray.getJSONObject(i).getString("sell_sentiment")); allDirectory.setRecommend(jsonArray.getJSONObject(i).getString("recommendation")); allDirectory.setPosted_date(jsonArray.getJSONObject(i).getString("posted_date")); allDirectory.setCall_id(jsonArray.getJSONObject(i).getString("call_id")); allDirectory.setExpiry_date(jsonArray.getJSONObject(i).getString("expiry_date")); allDirectory.setBroker_name(jsonArray.getJSONObject(i).getString("name")); allDirectory.setCall_detail(jsonArray.getJSONObject(i).getString("detail")); allDirectory.setProgress_indicator(0); catListDao.add(allDirectory); } catListDao1 = catListDao; adapter = new AdvisorsAdapter(act, R.layout.custom_equity, catListDao, 0); } catch (JSONException e) { e.printStackTrace(); } } } public class FetchAllData extends AsyncTask<Void, Void, String> { ProgressDialog pDialog; int typeId; private Context cont; public FetchAllData(Context con, int typeId) { // TODO Auto-generated constructor stub this.cont = con; this.typeId = typeId; Log.d("Constructor Called", "yes"); } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); if (!swipeRefreshLayout.isRefreshing()) { if (progressBar != null) { progressBar.setVisibility(View.VISIBLE); set.start(); } } } @Override protected String doInBackground(Void... params) { // TODO Auto-generated method stub return getString(); } private String getString() { // TODO Auto-generated method stub URL obj = null; HttpURLConnection con = null; try { obj = new URL(Constants.AppBaseUrl + "/call_listing/" + typeId); String userPassword = "rickmams" + ":" + "advisor11"; String header = "Basic " + new String(android.util.Base64.encode(userPassword.getBytes(), android.util.Base64.NO_WRAP)); con = (HttpURLConnection) obj.openConnection(); con.addRequestProperty("Authorization", header); con.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); con.setRequestMethod("POST"); // For POST only - BEGIN con.setDoOutput(true); OutputStream os = con.getOutputStream(); os.flush(); os.close(); // For POST only - END int responseCode = con.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { //success BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); Log.i("TAG", response.toString()); parseJSON(response.toString()); return response.toString(); } else { Log.i("TAG", "POST request did not work."); } } catch (IOException e) { e.printStackTrace(); } finally { if (con != null) { con.disconnect(); } } return null; } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); if (getActivity() == null) return; if (swipeRefreshLayout.isRefreshing()) { swipeRefreshLayout.setRefreshing(false); } if (result != null) { if (progressBar != null) { list.setAdapter(adapter); //pDialog.dismiss(); if (progressBar != null) { set.end(); if (progressBar.getVisibility() == View.VISIBLE) progressBar.setVisibility(View.GONE); } if (jsonArray.length() != 0) { empty_text.setVisibility(View.GONE); } else empty_text.setVisibility(View.VISIBLE); } } } } } 

Для полного stacktrace, как перейти на http://pastebin.com/7FDynA05

Я знаю, что опаздываю, но поскольку я видел ваши вопросы относительно обработки приложения, я не обнаружил ошибки ни в чем, но все же хочу сказать, пожалуйста, проверьте, вызываете ли вы какой-либо TypeFace каждый раз, создавая новый объект, чтобы комментировать их и Запустите свой код и дайте мне знать.

Я также столкнулся с таким типом проблемы давно, просто из-за того, что TypeFace пожалуйста, попробуйте мой ответ и дайте мне знать.

Благодарю.

Во-первых, я бы рекомендовал вам использовать любую сетевую библиотеку, которая может быть волейбольной или модифицированной. Поскольку они более эффективны, и они будут обрабатывать вызов в фоновом режиме и параллельно, не используя AsyncTask.

То, как вы пытаетесь, является наиболее сложным, как вы называете одновременно.

Если это необходимо, то только сетевой вызов возобновляется. Покой вы можете вызвать его в onCreateView. Или вы даже можете называть его в начале.

Не выполняйте тяжелую работу в рамках действий или фрагментов, или каждый раз, когда вы изменяете пользовательский интерфейс, вам придется управлять проблемами (с асинхронной задачей тоже).

Вы можете использовать асинхронную задачу или библиотеку, такую ​​как залп, но с услугами. Хороший учебник здесь .