当线程启动的活动离开时,如何停止线程?



我已经查看了onBackPressed()onPause()onStop(),但我能发现的最大问题是我的Thread没有在Activity中声明。我有MainActivityTiltActivity.有一个Button,按下时会把你从MainActivity送到TiltActivity。进入TiltActivity后,我创建了一个类TCP_IP_Client的对象。然后我启动一个在TCP_IP_Client内声明的"线程"。

我无法将Thread参数传递给onBackPressed()onPause()onStop()。如果我无法在先前覆盖的函数中中断TiltActivity,如何在剩下后停止Thread。同样,Thread没有在TiltActivity中声明,这将使中断Thread变得更加容易。如果您需要进一步澄清,请告诉我。

您需要向TCP_IP_Client添加一个方法,该方法将停止它声明和启动的线程。 然后,您可以在 TitleActivity 的TCP_IP_Client实例上调用该方法(使用保存TCP_IP_Client实例的成员变量(。

这是假设您在Thread中有某种循环。 在TiltActivity中,定义一个属性来保存对Thread的引用,并定义一个共享boolean,让它知道它应该停止。 并且您提供了用于访问共享变量的同步方法。

onResume()中创建并启动Thread,以便每次进入活动时都会重新创建它。在onPause()每次它即将从前景中带走时,您都会发出停止和中断的信号;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
public class ThreadActivity extends AppCompatActivity {
public static final String TAG = ThreadActivity.class.getName();
boolean stopThread = false;
Thread t;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
protected void onResume() {
super.onResume();
startTheThread();
}
public synchronized boolean continueRunning(){
return !stopThread;
}
public synchronized void startTheThread(){
this.stopThread = false;
Toast.makeText(ThreadActivity.this,"Thread Starting",Toast.LENGTH_SHORT).show();
t = new Thread(new Runnable() {
@Override
public void run() {
while(continueRunning()){
try {
Thread.sleep(5000);
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ThreadActivity.this,"Thread running",Toast.LENGTH_SHORT).show();
}
});
}catch (InterruptedException e){
;//do nothing
}
}
}
});
t.start();
}
public synchronized void stopTheThread(){
this.stopThread = true;
t.interrupt();
Toast.makeText(ThreadActivity.this,"Thread stopped",Toast.LENGTH_SHORT).show();
}
@Override
protected void onPause() {
super.onPause();
stopTheThread();
}
}

相关内容

  • 没有找到相关文章

最新更新