una tiempo thread tarea studio segundo runonuithread procesos plano mantener gestion ejemplo ejecutar cierto cada asynctask app android multithreading user-interface android-fragments android-asynctask

android - tiempo - Suspensión de subprocesos mientras se ejecutan varias AsyncTasks en fragmentos anidados y hace que la aplicación sea lenta



thread android studio ejemplo (3)

Aquí estoy llamando a servicios web en Fragmentos anidados que tiene TabLayout y ViewPager usando AsyncTask . He intentado con AsyncTasks llamándolos a todos en el método onResume de cada Fragment como:

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

y

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

Todo está bien, pero tengo muchos problemas

  • La aplicación deja de funcionar sin ningún diálogo, pero muestra la suspending all threads en Logcat.

  • Cuando aparece este fragmento (que ha anotado los tablayouts y viewpagers) de otra actividad que se muestra en la imagen, todo se pone en blanco, excepto la barra de herramientas durante 3 a 5 segundos. Y de repente vienen con datos completos.

  • Cuando llamamos a este fragmento de otro fragmento de la misma actividad, se congela allí y, de repente, se abren estos fragmentos.

Espero que tengas todos mis problemas si no, por favor infórmame.

Stacktrace es:

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); } } } } }

Para obtener información completa sobre stacktrace, visite http://pastebin.com/7FDynA05.


En primer lugar, le recomendaría usar cualquier biblioteca de red que pueda ser voley o retrofit. Como son más eficientes y manejarán la llamada en segundo plano y de forma paralela sin usar AsyncTask.

La forma en que lo intentas es más sofisticada, como lo haces simultáneamente.

Si es necesario, solo realice una llamada de red en la hoja de vida. Descanse puede llamarlo enCreateView. O incluso puede elegir llamarlo al inicio.


No realice operaciones pesadas dentro de actividades o fragmentos, o cada vez que modifique la interfaz de usuario tendrá que gestionar los problemas (también con la tarea asincrónica).

Puede usar la tarea de asincronización o la biblioteca, como volea, pero con servicios. Un buen tutorial está aquí .


Sé que llego tarde pero al ver sus muchas preguntas sobre el procesamiento de la aplicación no encontré ningún error en nada, pero aún así quiero decir que compruebe si llama a TypeFace creando un objeto nuevo cada vez, así que TypeFace y ejecuta tu código y avísame.

También me he enfrentado a este tipo de problema hace mucho tiempo solo por TypeFace así que por favor prueba mi respuesta y avísame.

Gracias.