Я попытался создать приложение для Android, которое использует поток внутри службы, службы и потока с хорошо работает, но когда я останавливаю и уничтожаю службу, live, поэтому, когда я снова запускаю приложение, в приложении есть 2 потока, поэтому я wannt знаю, как я могу уничтожить поток. Кто-нибудь может помочь мне решить проблему?Android: Thread по-прежнему работает навсегда, хотя служба уже уничтожает
здесь мой класс обслуживания:
public class MyService extends Service{
Handler handler;
static String toast_msg;
Thread t;
private static final String TAG = "MyService";
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Congrats! MyService Created", Toast.LENGTH_LONG).show();
Log.d(TAG, "onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
/* Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
Log.d(TAG, "onStart");
//Note: You can start a new thread and use it for long background processing from here.*/
toast_msg = "Horas";
super.onStart(intent, startId);
Toast.makeText(getApplicationContext(), toast_msg, Toast.LENGTH_LONG)
.show();
handler = new Handler() {
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
Toast.makeText(getApplicationContext(), toast_msg,
Toast.LENGTH_LONG).show();
}
};
t = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
t.sleep(5000);
// Toast.makeText(getApplicationContext(), "Horas",
// Toast.LENGTH_LONG).show();
handler.sendEmptyMessage(0);
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
t.start();
}
@Override
public void onDestroy() {
Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
Log.d(TAG, "onDestroy");
//t.interrupt();
handler.removeCallbacks(t);
super.onDestroy();
t.currentThread().interrupt();
}
}
Это действительно решает его непосредственную проблему, но я предложил то, что, по моему мнению, было бы лучшим подходом ниже :) – wislon
Это работа и хорошо работает, я думаю, что это полезно для других, таких как я, спасибо – user2548784
Переменная флагов используется для двух разных потоков, поэтому весь доступ к нему должен быть синхронизирован, чтобы гарантировать правильное поведение. – Kai