gpt4 book ai didi

android - View 的draw 方法是否可以在Android 的后台线程中运行?

转载 作者:行者123 更新时间:2023-11-29 02:40:22 25 4
gpt4 key购买 nike

我想在后台线程上捕获屏幕。所以我使用线程来完成这项工作,如下所示:

private void captureScreen(final Context context) {
new Thread(){
@Override
public void run() {
View view = ((Activity) context).findViewById(android.R.id.content);
Bitmap bmp = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888);

if (null != bmp) {
view.draw(new Canvas(bmp));
stack.push(bmp);
}
}
}.start();
}

大多数时候没有问题,但有时这会因为“只有原始线程可以触摸这个”而导致崩溃,所以让 view.draw() 在其他线程上运行是正确的事情,或者你有更好的方法来捕获后台线程上的屏幕?

最佳答案

问题是您不是在 UI 线程中执行代码。Android 提供了几种使用 UI 线程的方法:

MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
captureScreen();
}
});

MainActivity.this.myView.post(new Runnable() {
public void run() {
captureScreen();
}
});

private class BackgroundTask extends AsyncTask<String, Void, Bitmap> {

.......

protected void onPostExecute(Bitmap result) {
captureScreen(result);
}
}

并且您需要重构您的 captureScreen(); 方法以不创建新的 Thread() 只做屏幕截图。

关于android - View 的draw 方法是否可以在Android 的后台线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com