【问题标题】:How to trigger a method invocation of an activity from another activity?如何从另一个活动触发一个活动的方法调用?
【发布时间】:2018-06-18 16:15:13
【问题描述】:

我有一个CropViewActivity 可以裁剪图像,将裁剪后的图像保存到外部存储中。解码位图并将其保存到外部存储的过程在另一个线程中完成。因此裁剪活动结束,而图像处理仍在后台进行。现在我想要一种方法来通知我的另一个Activity,其中包含一个ImageView。在后台图像处理结束时,ImageView 应该从内存中获取保存的图像并加载它。

如何实现这种线程间和交互活动的通信?请帮忙。。

【问题讨论】:

    标签: java android multithreading bitmap kotlin


    【解决方案1】:

    有几种方法可以做到这一点。我想给你推荐一些。

    1. 您可以在完成图像处理后考虑使用BroadcastReceiver。您需要在包含ImageView 的活动中注册接收器,并在另一个活动中处理图像后,使用您正在收听的所需意图发送广播。这是一个sample implementation,关于如何实现BroadcastReceiver
    2. 活动之间通信的另一种方式是启动活动以获得结果。请参阅developers documentation 以了解如何使用startActivityForResult,然后从处理图像的活动中获取结果,并将结果返回给包含ImageView 的调用活动。

    您可以根据您的用例选择最适合的这两种。希望对您有所帮助。

    【讨论】:

    • 非常感谢 :) BroadcastReceiver 方法对我有用。
    • 对不起。我已经纠正了。我是stackoverflow的新手。我不确定那个勾号图标是干什么用的。
    【解决方案2】:

    AsnycTask?

    typealias Callback = () -> Unit
    
    class BitmapWorker: AsyncTask<Callback, Void, Callback?>
        override fun doInBackground(vararg params: Callback): Callback? {
            // work with bitmap
            return params.firstOrNull()
        }
    
        override fun onPostExecute(finishTask: Callback?) {
            finishTask?.invoke()
        }
    }
    

    这样称呼:

    BitmapWorker().execute(fun() {
        println("finished")
    }
    

    【讨论】:

    • 在完成我的工作之前,我必须对 AsyncTask 进行大量研究。谢谢你的建议 :) 这种方法对我来说似乎是最优雅的。
    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    相关资源
    最近更新 更多