2017-06-07 4 views
0

Wie Handler zusammen Dienst stoppenWie Stop-Service mit Handler

Service:

int delay = 10000; 
new Handler().postDelayed(new Runnable() { 
    public void run(){ 
     //Do Something every 10 seconds 
     new Handler().postDelayed(this, delay); 
    } 
}, delay); 

... 

public void onDestroy() { 
    // TODO: Implement this method 
    super.onDestroy(); 
    stopSelf(); 
} 

In Aktivität auf I Stopservice dieser Handler weiterlaufen nennen.

Antwort

1

Ändern Sie Ihren Handler wie folgt: Fügen Sie ein boolesches Flag hinzu, das Sie auf 'false' setzen würden, wenn Sie den Handler stoppen müssen. In Ihrem runnable, fügen Sie folgendes:

int delay = 10000; 
static boolean running = true; 
new Handler().postDelayed(new Runnable() { 
    public void run(){ 
     if (running) { 
      new Handler().postDelayed(this, delay); 
     } 
    } 
}, delay); 

public void onDestroy() { 
    super.onDestroy(); 
    stopSelf(); 
    running = false; 
} 

Es wird einfach nicht wieder von vorne anfangen.

+0

Dies ist, wie die Dinge gemacht werden, anstatt in einer 'while (true') -Schleife zu laufen. +1. Für einen Bonus-Cookie würde ich vermeiden, Dutzende von Handlern zu machen und einfach die erste wiederverwenden. Dann in stopSelf() Rufen Sie einfach 'handler.removeMessagesAndCallbacks()' sowie 'running = false' an und machen Sie das. – Shark

+0

Ja, Ihr Vorschlag ist sehr richtig, höchstwahrscheinlich werden keine weiteren Nachrichten gepostet, aber es ist so gut zu tun, nur für den Fall. –

+0

beseitigt Hinweise auf tote Threads, die Speicher hilft und verhindert Verlangsamungen und hält es ansprechend.Obwohl, nicht sehr anwendbar, wenn ständig 'neue Handler's obwohl. – Shark