Fond collant simultanées marque de balayage GC libéré
J'ai une application qui vérifie la base de données toutes les 10 secondes si il y a de nouvelles données, si il n'y a aucune données qu'il va l'obtenir et arrêter la vérification de la base de données.
J'ai mis en place un texte de l'observateur afin de vérifier si la zone de texte est vide. Si elle l'est, elle permet de vérifier la base de données, si elle contient du texte, il va l'arrêter.
C'est mon code:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtBoxUser.addTextChangedListener(checkUserRent);
getData();
}
//TEXTWATCHER FOR GETTING PERSON WHO RENTED BOX
private final TextWatcher checkUserRent = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void afterTextChanged(Editable s) {
if (s.length() == 0) {
check();
} else {
Toast.makeText(MainActivity.this, "STOP",
Toast.LENGTH_LONG).show();
}
}
};
public void start(View view)
{
getData();
}
public void cancel(View view)
{
txtBoxUser.setText("");
txtBoxPasscode.setText("");
}
private void getData(){
final String id = txtBoxName.getText().toString().trim();
class GetEmployee extends AsyncTask<Void,Void,String>{
ProgressDialog loading;
@Override
protected void onPreExecute() {
super.onPreExecute();
// loading = ProgressDialog.show(MainActivity.this,"Fetching...","Wait...",false,false);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// loading.dismiss();
showEmployee(s);
}
@Override
protected String doInBackground(Void... params) {
RequestHandler rh = new RequestHandler();
String s = rh.sendGetRequestParam(DATA_URL,id);
return s;
}
}
GetEmployee ge = new GetEmployee();
ge.execute();
}
private void showEmployee(String json){
try {
JSONObject jsonObject = new JSONObject(json);
JSONArray result = jsonObject.getJSONArray(JSON_ARRAY);
JSONObject c = result.getJSONObject(0);
String name = c.getString(GET_BOXUSER);
String desg = c.getString(GET_PASSCODE);
txtBoxUser.setText(name);
txtBoxPasscode.setText(desg);
} catch (JSONException e) {
e.printStackTrace();
}
}
private void check()
{
getData();
}
Mais je reçois ce dans le logcat alors qu'il est en attente pour les données. Je me demande est-ce normal ou sans échec?
I/art: Background sticky concurrent mark sweep GC freed 5614(449KB) AllocSpace objects, 18(288KB) LOS objects, 33% free, 1691KB/2MB, paused 5.354ms total 10.731ms
I/art: Background sticky concurrent mark sweep GC freed 7039(557KB) AllocSpace objects, 22(352KB) LOS objects, 39% free, 1561KB/2MB, paused 10.554ms total 15.931ms
I/art: Background partial concurrent mark sweep GC freed 7279(564KB) AllocSpace objects, 21(336KB) LOS objects, 40% free, 1504KB/2MB, paused 5.721ms total 15.823ms
I/art: WaitForGcToComplete blocked for 5.375ms for cause HeapTrim
I/art: Background partial concurrent mark sweep GC freed 7650(591KB) AllocSpace objects, 22(352KB) LOS objects, 40% free, 1505KB/2MB, paused 5.511ms total 21.465ms
OriginalL'auteur | 2017-02-22
Vous devez vous connecter pour publier un commentaire.
Ce qui est parfaitement correct. Cela signifie que vous êtes en utilisant de la mémoire, puis de son être libéré par le GC. Son seul problème est soit vous sortez de la mémoire, ou voyez-vous la performance de hoquet en raison de la collecte des ordures. Mais ce n'est pas quelque chose que vous devez à la course à corriger.
alors, quelle est la solution pour résoudre ce problème, je suis confronté à la même situation pour modifier la zone de texte???
ce n'est pas un problème, donc il n'y a rien à résoudre. Certains algorithmes/apps utilisent de la mémoire. Si il n'y a pas de performance hoquet c'est parfaitement bien
Peut la performance de l'application de descendre à cause de cela?
Mon application se bloque pendant quelques secondes, parce que ce qui se passe. S'il vous plaît suggérer une solution.
OriginalL'auteur Gabe Sechan
J'ai eu le même problème. Votre code fonctionne, mais si cela se bloque pendant trop longtemps, l'application peut obtenir une Application ne Répond Pas d'erreur et de proximité. Il a également défait le but de l'utilisation d'un AsyncTask.
Le problème est que votre AsyncTask contient un texte en vue de bloquer toutes les autres actions lors de l'exécution. Pour résoudre ce problème, effectuez votre AsyncTask statique et passer une référence à l'affichage de Texte. Puis le stocker dans un WeakReference.
OriginalL'auteur Joel Page