Mam aplikację, która sprawdza bazę danych co 10 sekund, jeśli są jakieś nowe dane, jeśli są jakieś dane, dostanie je i przestanie sprawdzać bazę danych.Tło lepkie równoczesne zamiatanie znaczników GC uwalniające
Zaimplementowałem moduł do sprawdzania tekstu, aby sprawdzić, czy pole tekstowe jest puste. Jeśli tak, sprawdzi bazę danych, jeśli zawiera tekst, który zatrzyma.
To jest mój kod:
@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();
}
Ale mam to w LogCat gdy jest oczekiwanie na dane. Zastanawiam się, czy to jest w porządku czy bezpieczne?
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
Dziękuję, proszę pana! Przynajmniej nie mogę oddychać łatwo teraz haha. –
więc, jakie jest rozwiązanie, aby rozwiązać ten problem, mam do czynienia z tą samą sytuacją dla pola edycji tekstu ??? –
@GeorgySavatkov to nie problem, więc nie ma nic do rozwiązania. Niektóre algorytmy/aplikacje używają tylko pamięci. Jeśli nie występują problemy związane z wydajnością, to jest w porządku –