Android 当一个线程在其中启动的活动离开时,如何停止该线程?

Android 当一个线程在其中启动的活动离开时,如何停止该线程?,android,onpause,onbackpressed,Android,Onpause,Onbackpressed,我已经研究了onBackPressed()、onPause()和onStop(),但我发现,针对这些问题,我的线程没有在活动中声明。我有main活动和TiltActivity。有一个按钮,按下该按钮时,会将您从main活动发送到TiltActivity。进入TiltActivity后,我创建了类TCP\u IP\u Client的对象。然后启动一个“线程”,该线程在TCP\u IP\u客户端中声明 我无法将线程参数传递给onBackPressed()、onPause()或onStop()。如果我

我已经研究了
onBackPressed()
onPause()
onStop()
,但我发现,针对这些问题,我的
线程
没有在
活动中声明。我有
main活动
TiltActivity
。有一个
按钮
,按下该按钮时,会将您从
main活动
发送到
TiltActivity
。进入
TiltActivity
后,我创建了类
TCP\u IP\u Client
的对象。然后启动一个“线程”,该线程在
TCP\u IP\u客户端
中声明


我无法将
线程
参数传递给
onBackPressed()
onPause()
onStop()
。如果我不能在以前的重写函数中中断
线程,我如何停止
线程
一次
活动
。同样,
线程
未在
活动
中声明,这将使中断
线程
更加容易。如果您需要进一步的澄清,请让我知道。

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

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

onResume()
中,创建并启动
线程
,以便在每次进入活动时重新创建该线程。在
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();

    }
}

你不能保留对它的引用并停止onPause/onStop函数中的线程吗?你不能将引用传递给函数
public void onPause(线程t)
不是一件令人遗憾的事情。将其作为活动中的一个字段,并将其设置为onCreate,然后您可以在onPause中访问它。我将在周一尝试此操作,并让您知道它的运行情况。这听起来像是一个我真的应该想到的好的简单的修复方法。非常感谢。