J'ai une application qui obtient les données pour un jour donné en réponse d'un serveur web et qui trace le graphique o/p en fonction des données (nombre/heure) qui sont arrivées.android async tasks
Maintenant, j'appelle le serveur web comme une tâche asynchrone.
Je peux également passer sur plusieurs écrans (jour précédent/jour suivant) pour appeler plusieurs fois le serveur Web (plusieurs tâches asynchrones) afin d'obtenir les données du serveur.
Le problème est lorsque le nombre de lancements (tâches asynchrones) augmente, l'application affiche ANR.
Existe-t-il une meilleure façon de gérer ce type de scénarios plutôt que de créer une tâche asynchrone pour chaque appel de serveur Web (fling).
Ajout partie du code:
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
valuesDayWithTime=onStart(datePrevious);
}
public GraphView onStart(String date){
urlFinal=createUrl();
new DownloadDataTask(this).execute(urlFinal);
}
private class DownloadDataTask extends AsyncTask<String, Integer, Long> {
YieldActivity yActivity;
ProgressBar pBar ;
DownloadDataTask(YieldActivity act){
yActivity=act;
}
protected void onPreExecute() {
relLay=(RelativeLayout) findViewById(R.id.graphView);
pBar
= new ProgressBar(yActivity);
LayoutParams lp =new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
pBar.setLayoutParams(lp);
pBar.setMax(100);
relLay.removeAllViews();
relLay.addView(pBar);
}
protected Long doInBackground(String... urls) {
int totalCount = urls.length;
for (int i = 0; i < totalCount; i++) {
publishProgress((int) ((i/(float) totalCount) * 100));
downloadFromUrl(urls[i]);
}
return (long) totalCount;
}
protected void onProgressUpdate(Integer... progress) {
Log.i(progress[0] +"%");
}
protected void onPostExecute(Long result) {
graphViewDay=calculate(dateNow,valuesDayWithTime);
relLay.removeView(pBar);
relLay.addView(graphViewDay);
}
}
public void downloadFromUrl(String fromURL) {
try {
getHttpResponse(fromURL.toString());
parseResponse();
}
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
Veuillez poster la solution qui a fonctionné pour vous afin que d'autres puissent s'y référer. –