我查看了onBackPressed()
,onPause()
和onStop()
,但我发现的最大问题是我的Thread
未在Activity
。我有MainActivity
和TiltActivity
。有一个Button
,按下后会将您从MainActivity
发送到TiltActivity
。进入TiltActivity
后,我创建了一个类TCP_IP_Client
的对象。然后我开始了一个'线程'在TCP_IP_Client
内声明。
我无法将Thread
参数传递给onBackPressed()
,onPause()
或onStop()
。如果我在以前的重写函数中不能中断Thread
,我该如何停止TiltActivity
。同样,Thread
未在TiltActivity
中声明,这样可以更轻松地中断Thread
。如果您需要进一步说明,请告诉我。
答案 0 :(得分:1)
您需要向TCP_IP_Client添加一个方法,该方法将停止它声明并启动的线程。然后,您可以从TitleActivity中调用TCP_IP_Client实例上的该方法(使用包含TCP_IP_Client实例的成员变量)。
答案 1 :(得分:0)
假设您在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();
}
}