java - Android应用程序等待通知奇怪的行为
问题描述
片段必须等待在另一个线程中呈现的位图。为了“提高”性能,我首先显示片段,然后从另一个线程粘贴图像。位图线程可能会更快,或者片段创建会更快(这会更好)。我想在以后创建片段时运行代码,并且当我可以将位图附加到 ImageView 时。
所以我尝试通过等待和通知来解决问题。服务员线程告诉我位图为空,但在通知线程中,位图被分配给 a 地址。怎么可能一个线程正在打印我一个地址,但另一个线程,它正在等待(UI 线程,onViewCreated()
)告诉我地址为空?
代码:
private static final Object objectWaiterForImage = new Object();
public void onBitmapReady(Bitmap bitmap)
{
bitmapLastPic = bitmap;
synchronized (objectWaiterForImage)
{
System.out.println("DHH: Calling notify " + objectWaiterForImage);
objectWaiterForImage.notifyAll();
System.out.println("DHH: notify called " + objectWaiterForImage);
System.out.println("DHH: notify called null check " + bitmapLastPic);
}
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
{
super.onViewCreated(view, savedInstanceState);
new Thread(new Runnable()
{
@Override
public void run()
{
try
{
synchronized (objectWaiterForImage)
{
while(bitmapLastPic == null)
{
System.out.println("DHH: waiting " + objectWaiterForImage);
objectWaiterForImage.wait();
System.out.println("DHH: waiting end " + objectWaiterForImage);
}
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
System.out.println("DHH: setting bitmap");
imageView.getSource().setImageBitmap(bitmapLastPic);
listener.onBitmapReady();
}
});
}
}
catch (Exception ec)
{
System.out.println("onViewCreated() failed: " + ec);
}
}
}).start();
show();
}
目标是让片段监听其他线程完成,并显示位图。防止工作线程在片段完成自身创建之前完成。我这样做的原因是用户不应该为页面等待太久。所以它首先显示 ui,然后在一些 ms 之后显示最终渲染的图像。
解决方案
推荐阅读
- vb.net - 具有 Winforms / bindingsource 的实体 - 无法保存来自控件的用户输入
- google-kubernetes-engine - 如何使用 Helm 更新 GKE 集群上运行的工作负载的 ConfigMap?
- python - 如何从两个numpy数组元素中插入一维数组
- angularjs - 使用 Identity Server 和 Angular 应用程序获取 CORS 策略错误
- python-3.x - 如何在 Python 3 中播放具有开始时间和结束时间的 MP3 文件的最佳方式是什么
- excel - Table.ListRows.Add 在我的计算机上正常工作,但在我们的 20 台计算机化学实验室中没有其他计算机
- ember.js - 在 ember mocha 中使用 before all hook 时出现 TypeError
- scrapy - scrapy-splash 爬虫启动速度快但速度慢(不受网站限制)
- c# - 为什么Web应用程序找不到目录?
- intellij-idea - 在格式上禁用 IntelliJ 拆分行注释