我在我的MainActivity中有一個選中的按鈕。如果該按鈕被選中,它應該啓動服務,但如果用戶未選中按鈕,我想停止服務。android-如何停止服務中的線程?
所以在取消選中的條件下我寫了這個stopService(intentname);
但問題是服務沒有停止。這裏是我的代碼片段:
服務類
public class SimpleService extends Service
{
String selectedAudioPath = "";
private MyThread myythread;
public Intent intent;
public boolean isRunning = false;
long interval=30000;
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
@Override
public void onCreate()
{
super.onCreate();
myythread = new MyThread(interval);
}
@Override
public synchronized void onDestroy()
{
super.onDestroy();
if(!isRunning)
{
myythread.interrupt();
myythread.stop();
isRunning = false;
}
}
@Override
public synchronized void onStart(Intent intent, int startId)
{
super.onStart(intent, startId);
if(!isRunning)
{
//this.intent = intent;
//System.out.println("the intent is" + intent);
myythread.start();
isRunning = true;
}
}
class MyThread extends Thread
{
long interval;
public MyThread(long interval)
{
this.interval=interval;
}
@Override
public void run()
{
while(isRunning)
{
System.out.println("Service running");
try
{
String myString = intent.getStringExtra("name");
if(myString == null)
Log.d("Service","null");
else
{
Log.d("Service","not null");
if(myString.equalsIgnoreCase("image"))
{
uploadImages();
Thread.sleep(interval);
}
else if(myString.equalsIgnoreCase("audio"))
{
uploadAudio();
Thread.sleep(interval);
}
}
}
catch (InterruptedException e)
{
isRunning = false;
e.printStackTrace();
}
}
}
的可能的複製http://stackoverflow.com/questions/4756862/how-to-stop-a-thread和http://stackoverflow.com/questions/5660097/stopping-destroying-a-thread –
[停止服務中的線程]可能的重複(http://stackoverflow.com/questions/14700936/stopping-a-thread-inside-a-service) –
這可能是因爲你只複製粘貼部分代碼,但我不明白爲什麼你需要一個線程在你的例子中:服務本身已經在後臺線程中運行,你可以直接使用它來上傳你的文件(就像你的代碼看起來你只有一個線程可以上傳)你不需要爲此啓動另一個線程。此外,線程中的while循環將無限期地一次又一次地上傳相同的文件。 –