Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按下后退按钮后android线程仍在运行_Android_Multithreading - Fatal编程技术网

按下后退按钮后android线程仍在运行

按下后退按钮后android线程仍在运行,android,multithreading,Android,Multithreading,我想在按下后退按钮时停止线程。 我正在使用处理程序您不能使用停止或销毁方法。 必须使用onStop方法。在创建线程时存储对线程的引用。在活动的onPause中,暂停或终止引用线程。您需要使用处理程序的removeCallbacks()函数 示例代码: @Override public boolean onBackPress(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { han

我想在按下后退按钮时停止线程。

我正在使用
处理程序

您不能使用
停止
销毁
方法。
必须使用
onStop
方法。

在创建线程时存储对线程的引用。在活动的
onPause
中,暂停或终止引用线程。

您需要使用
处理程序的
removeCallbacks()函数

示例代码:

@Override
public boolean onBackPress(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        handler.removeCallbacks(yourRunnable);
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

通过覆盖“活动”中的
onBackPressed()
函数,可以在按下后退按钮时指定操作。此操作必须具有停止线程的命令。它将显示如下

@Override
public void onBackPressed() {
    super.onBackPressed();
             thread.stop();
}

下面是一个演示,以更简单、更快的方式停止线程

Button back = (Button)findViewById(R.id.back);
back.setText("Back");
back.setOnClickListener(this);

private Handler handler = new Handler() 
{
@Override
    public void handleMessage(Message msg) 
    {
        super.handleMessage(msg);
        if(msg.obj.toString().contentEquals("hello"))
        {
            // do whatever u what to perform after thread stop....
        }
        removeDialog(0);
        }
 };

@Override
public void onClick(View v) 
{
    if(v==back)
    {   
        showDialog(0);
        t=new Thread()
        {
            public void run()
            {
                Message toMain = handler.obtainMessage();
                toMain.obj = "hello";
                handler.sendMessage(toMain); 
            }
        };          
        t.start();
    }
}

@Override
protected Dialog onCreateDialog(int id) 
{
             switch (id) 
        {
                    case 0: 
            {
                          ProgressDialog dialog = new ProgressDialog(this);
                          dialog.setMessage("Connecting . . . . . .");
                          dialog.setIndeterminate(true);
                          dialog.setCancelable(true);
                          return dialog;
                    } 
              }
              return null;
}

使用此方法创建或停止线程。我希望这会花费更少的时间。

如果您使用的是handler,您可以通过handler删除回调;
这应该很有效。快乐编码:)

@Override public void onBackPressed(){handler.removeCallbacks(r1);super.onBackPressed();}这没问题??这不正确。使用
处理程序中的
removeCallback()
函数。请看下面我的答案。他使用的是
处理程序
,它与最初的
线程
不在同一上下文中。我们不能停止或破坏线程和方法。。谢谢你给我看《金牛向导》。。投你一票。。非常感谢您…@siten:您如何确定您的线程是否仍在运行?@siten:请发布一些相关文本。你说的显示线程的值是什么意思?@Viktor有没有什么解决方案,在返回按钮后,我的线程将关闭。。我从不在电流中断线execution@siten当前位置那篇课文告诉我的不多。你说的显示线程的值是什么意思?我继续生成线程,每次线程返回该值时。。。但在后退按钮后,它会在5秒后持续显示我在postdelayed中使用的内容。该值为。。HDFC.BO;购买620;620;655;640.1;false_我使用了handler…和thread.stop();或handler.stop();无法在Backpress中使用您是否为线程命名并在OnBackpress中使用它?