J'essaye de créer une activité de causerie, qui fonctionne avec la base de données Azure SQL. La logique est que tous les messages sont listés sur un listView, un service d'instance vérifiera s'il y a une nouvelle table de données dans la base de données, si c'est le cas, efface ChatAdapter et ajoute toutes les données, puis setAdapter to listView à nouveau. Quand j'ouvre l'activité, ça marche, je peux envoyer des messages, ça va directement sur la base de données et ça arrive à l'écran mais l'activité fonctionne lentement, spikey et parfois gèle pendant une demi-seconde. Peut-être que si je fais la vérification de base de données dans intentservice, cela peut résoudre le problème mais je ne veux rien faire sans conseils. Je ne suis pas vraiment amateur, donc mon code me semble être un gâchis. Aussi je "dois" résoudre ce problème avec cette logique. Donc, vous avez besoin de conseils comme "ne faites pas cette tâche ici, faites-le, n'utilisez pas InstanceService, utilisez AsyncTask ..." au lieu de "Utiliser les services de chat, les services mobiles, ne le faites pas avec la base de données .... », etc.Mon activité android est en train de geler et de travailler lentement. Je dois le rendre stable
Il est mon listView rafraichir le code:
public static boolean refreshList()
{
if(chatArrayAdapter!=null) {
chatArrayAdapter.Reset();
chatArrayAdapter.notifyDataSetChanged();
listView.deferNotifyDataSetChanged();
chatArrayAdapter.notifyDataSetChanged();
Mes = null;
}
try {
SqlCon.httpIslemleri(); /** AsyncTask to connect Db**/
Connection con = SqlCon.returnCon(); /** Returns DB Connection **/
Statement getMes = con.createStatement();
SetUser User = Intro.stUser;
Mes = null;
Mes = getMes.executeQuery("select * from tb_ms where (ms_sender = "+User.getid()+" or ms_sender = "+value+") and (ms_getter = "+User.getid()+" or ms_getter = "+value+")");
while(Mes.next())
{
if(Mes.getInt("ms_sender")==User.getid())
{
side=false;
}
else if(Mes.getInt("ms_getter")==User.getid())
{
side=true;
}
chatArrayAdapter.add(new ChatMessage(side, Mes.getString("ms_mes")));
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
return true;
}
fonction CheckMesChanges. Qui vérifie si le tableau a changé Messages:
public static boolean CheckMesChanges(ResultSet Mes)
{
SqlCon.httpIslemleri();
Connection con = SqlCon.returnCon();
Statement getMes = null;
try {
getMes = con.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
SetUser User = Intro.stUser;
try {
MesCheck = getMes.executeQuery("select * from tb_ms where (ms_sender = "+User.getid()+" or ms_sender = "+value+") and (ms_getter = "+User.getid()+" or ms_getter = "+value+")");
} catch (SQLException e) {
e.printStackTrace();
}
if(MesCheck==Mes)
{
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
else
{
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return true;
}
et mon service intention qui contrôle CheckMesChanges et appelle refreshList si elle retourne vrai:
public class IntentMesControl extends IntentService {
public IntentMesControl(String name) {
super(name);
}
final Handler handler = new Handler();
protected void onHandleIntent() {
if(ChatBubbleActivity.CheckMesChanges(ChatBubbleActivity.Mes)==true)
{
ChatBubbleActivity.refreshList();
}
else {
}
handler.postDelayed(new Runnable() {
public void run() {
onHandleIntent();
}
}, 500);
}
@Override
protected void onHandleIntent(final Intent intent) {
if(ChatBubbleActivity.CheckMesChanges(ChatBubbleActivity.Mes)==true)
{
ChatBubbleActivity.refreshList();
}
else {
}
handler.postDelayed(new Runnable() {
public void run() {
onHandleIntent();
}
}, 500);
}
}
Je commence à IntentMesControl onCreate d'activité. Alors pouvez-vous m'aider, donnez moi quelques conseils pour rendre mon activité plus stable et rapide? Je vous remercie.
Ce n'est pas une bonne pratique d'appeler directement une méthode comme 'Activity.myMethod()' – Ozgur