Mam aplikację, w której, gdy statystyki "gry", zaczyna się kilka różnych wątków. Zacznę wątki tak:Dobra praktyka do wielowątkowości
Thread thread = new Thread(new Runnable()
{
public void run()
{
//...
}
});
thread.setName("killMeAtEnd");
thread.start();
Później, gdy gra się kończy Mam metodę Dispose() wewnątrz gry, który sortuje przez wszystkich uruchomionych wątków i kończy wszystkie wątki, które mają nazwę „killMeAtEnd” . Moje pytanie brzmi: czy to dobra praktyka? Moją intencją jest, aby moja aplikacja działała szybko i bez bałaganu, z mojego doświadczenia Wątki, które pozostały "wiszące", spowalniają telefon do czasu zakończenia aplikacji. Czy jest lepszy sposób to zrobić? Czy to nawet warte zastanowienia?
EDIT:
Oto moja dispose()
jeśli ktoś był zainteresowany. Ten kod znajduje się w grze klasowej.
public void dispose()
{
Thread threads[] = (Thread[])Thread.getAllStackTraces().keySet().toArray();
for(int x=0;x<threads.length;x++)
{
Thread thread = threads[x];
if(thread.getName().equalsIgnoreCase(KILL))
{
try
{
thread.interrupt();
}catch(Exception e){Log.e(Viewer.GAME,Log.getStackTraceString(e));}
thread = null;
}
}
}
public static final String KILL = "endOnDispose";
Uzyskiwanie stacktraces jest dość kosztowne, więc byłoby wydajniejsze, gdybyś zapisał 'thread []' podczas tworzenia wątków i uczynił je 'dispose (Thread [] threads)'. Czy istnieją inne wątki, które wciąż działają, gdy gra się kończy, czy też ma to zapobiec zabiciu wątku interfejsu użytkownika? – zapl
Po zakończeniu "gry" działanie nie kończy się, przechodzi do czegoś innego. – John