Android 为什么';这不是主活动线程的结束吗?

Android 为什么';这不是主活动线程的结束吗?,android,Android,调用onDestory->仍在运行的线程 测试设备OS8.0 为什么它不停止后台工作8.0 我知道安卓8.0的后台工作不起作用 以下是示例代码: import android.content.Intent; import android.support.v7.app.`enter code here`AppCompatActivity; import android.os.Bundle; import android.util.Log; import andro

调用onDestory->仍在运行的线程 测试设备OS8.0

为什么它不停止后台工作8.0

我知道安卓8.0的后台工作不起作用

以下是示例代码:

 import android.content.Intent;
    import android.support.v7.app.`enter code here`AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.Toast;


    public class MainActivity extends AppCompatActivity {
        int count=0;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Thread thr = new Thread(new Runnable() {
                @Override
                public void run() {
                    try{
                          // why not stop after on Destroy
                        while(true) {
                            Log.e("test", "count : " + count+"  Status : ");
                            count++;
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this,count+"",Toast.LENGTH_SHORT).show();
                                }
                            });
                            Thread.sleep(1000);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

            });
            thr.start();
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.e("test","Main activity Destory");
        }
    }

如果使用简单处理程序而不是线程更新UI,并在销毁时使用remove回调,会发生什么情况。这是使用处理程序的示例代码。请尝试此操作

private int mCount = 0;
private Runnable mRunnable;
private Handler mNewHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mNewHandler = new Handler();
    mRunnable = new Runnable() {
        @Override
        public void run() {
            try {
                Log.e("test", "mCount : " + mCount + "  Status : ");
                mCount++;
                Toast.makeText(MainActivity.this, mCount + "", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                Log.e("Exception", "");
                e.printStackTrace();
            } finally {
                mNewHandler.postDelayed(mRunnable, 1000);
            }
        }
    };
    mRunnable.run();
}

@Override
public void onDestroy() {
    mNewHandler.removeCallbacks(mRunnable);
    super.onDestroy();
}

如果要使用线程,请尝试在销毁时添加此代码


中断()

如果使用简单处理程序更新UI而不是线程,并在销毁时使用remove回调,会发生什么情况。这是使用处理程序的示例代码。请尝试此操作

private int mCount = 0;
private Runnable mRunnable;
private Handler mNewHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mNewHandler = new Handler();
    mRunnable = new Runnable() {
        @Override
        public void run() {
            try {
                Log.e("test", "mCount : " + mCount + "  Status : ");
                mCount++;
                Toast.makeText(MainActivity.this, mCount + "", Toast.LENGTH_SHORT).show();
            } catch (Exception e) {
                Log.e("Exception", "");
                e.printStackTrace();
            } finally {
                mNewHandler.postDelayed(mRunnable, 1000);
            }
        }
    };
    mRunnable.run();
}

@Override
public void onDestroy() {
    mNewHandler.removeCallbacks(mRunnable);
    super.onDestroy();
}

如果要使用线程,请尝试在销毁时添加此代码


中断()

请。看,这实际上是内存泄漏。您正在创建一个非静态的内部类,该类保存对外部类的引用,它还防止您的主活动引用被标记为垃圾回收。我知道这是内存泄漏模式。但是安卓8.0更新了GC的内容。背景作品也很有限。因此,在这种情况下,无限使用后台工作?请。看,这实际上是内存泄漏。您正在创建一个非静态的内部类,该类保存对外部类的引用,它还防止您的主活动引用被标记为垃圾回收。我知道这是内存泄漏模式。但是安卓8.0更新了GC的内容。背景作品也很有限。那么在这种情况下,无限使用后台工作?