Java Android在延迟结束前获取公共位图函数返回
因此,我有一个Java Android在延迟结束前获取公共位图函数返回,java,android,delay,delayed-execution,timedelay,Java,Android,Delay,Delayed Execution,Timedelay,因此,我有一个公共静态位图,里面有2000密耳的延迟。我的问题是,在执行延迟的代码之前,我得到了return 让您了解我的职能结构: public static Bitmap getBitmapFromWebview(WebView webView){ *******************some code here Handler handler = new Handler(); handler.postDelayed(new Runnable() {
公共静态位图
,里面有2000密耳的延迟。我的问题是,在执行延迟的代码之前,我得到了return
让您了解我的职能结构:
public static Bitmap getBitmapFromWebview(WebView webView){
*******************some code here
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
********************declaring bm bitmap
Log.i("DelayD", "Delay");
}
}, 2000);
Log.i("DelayD", "Return");
return bm;
}
我已经设置了两条调试消息-在延迟部分内,一条在返回之前
以下是我在日志中得到的信息:
08-11 20:45:13.520 I/DelayD: Return
08-11 20:45:16.173 I/DelayD: Delay
以及一条错误消息,我不确定这些消息是否相关:
08-11 20:44:45.170 E/Sensors: new setDelay handle(0),ns(66667000)m, error(0), index(2)
08-11 20:44:48.082 E/Sensors: new setDelay handle(0),ns(66667000)m, error(0), index(2)
我的问题是,在执行被延迟的代码之前,我得到了return
正如中所述,postDelayed()
不会延迟调用它的方法。它将Runnable
调度为在指定的延迟期后运行<代码>getBitmapFromWebview()
有望在微秒后返回
我的问题是,在执行被延迟的代码之前,我得到了return
正如中所述,
postDelayed()
不会延迟调用它的方法。它将Runnable
调度为在指定的延迟期后运行getBitmapFromWebview()
可能会在微秒后返回。在处理程序上调用函数handler.postDelayed
时,它将获取您创建的Runnable
实例并将其存储在变量中。结束后,执行函数中的下一行
简单地说,在2000ms之后的某个时间,调用Runnable
中的函数run
因此,您看到的顺序是非常可预测的,您看到的结果也是如此
要掌握的核心概念是,您创建的匿名Runnable
类中的代码不会阻止当前执行线程。以后再运行
该函数理论上可以写成:
public static void getBitmapFromWebview(WebView webView, final WhenReady callback){
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
callback.doSomethingWithBitmap(bitmap);
}
}, 2000);
}
然后在调用代码中实现WhenReady接口:
interface WhenReady {
Bitmap doSomethingWithBitmap(Bitmap bitmap);
}
在处理程序上调用函数
handler.postDelayed
时,它将获取您创建的Runnable
实例并将其存储在变量中。结束后,执行函数中的下一行
简单地说,在2000ms之后的某个时间,调用Runnable
中的函数run
因此,您看到的顺序是非常可预测的,您看到的结果也是如此
要掌握的核心概念是,您创建的匿名Runnable
类中的代码不会阻止当前执行线程。以后再运行
该函数理论上可以写成:
public static void getBitmapFromWebview(WebView webView, final WhenReady callback){
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
callback.doSomethingWithBitmap(bitmap);
}
}, 2000);
}
然后在调用代码中实现WhenReady接口:
interface WhenReady {
Bitmap doSomethingWithBitmap(Bitmap bitmap);
}
有道理,谢谢你。但是,是否有一种方法可以完全像我一开始打算的那样阻止一个函数呢?不推荐,尤其是当你在你的UI线程上时。如果在UI线程上阻止函数,应用程序将停止响应用户输入。但是一个简单的线程。sleep(2000),就可以了(我说,带着幽默,不要把我当回事)。不完全确定你的最终目标是什么?我尝试了睡眠,但效果不好。至于我在做什么。。。这有点复杂-我正试图从
webview
生成bitmap
,但由于一些缩放问题,如果放大太多,可能会导致OOM崩溃,因此我正在开发一种解决方法。现在是“给函数更多的时间来处理一切”。这是一个悬赏案,虽然我想我已经弄明白了。是的,你需要开始为你的特例编程。这里有一个建议,如果可以的话,将位图保存在切片中。找到一个好的最大尺寸。一旦你超过这个尺寸,就把你的图像分成更小的四分之一。使用磁盘写入来帮助您远离ram。祝你好运顺便说一句,这个问题很酷(=)很有道理,非常感谢。但是,是否有一种方法可以完全像我一开始打算的那样阻止一个函数呢?不推荐,尤其是当你在你的UI线程上时。如果在UI线程上阻止函数,应用程序将停止响应用户输入。但是一个简单的线程。sleep(2000),就可以了(我说,带着幽默,不要把我当回事)。不完全确定你的最终目标是什么?我尝试了睡眠,但效果不好。至于我在做什么。。。这有点复杂-我正试图从webview
生成bitmap
,但由于一些缩放问题,如果放大太多,可能会导致OOM崩溃,因此我正在开发一种解决方法。现在是“给函数更多的时间来处理一切”。这是一个悬赏案,虽然我想我已经弄明白了。是的,你需要开始为你的特例编程。这里有一个建议,如果可以的话,将位图保存在切片中。找到一个好的最大尺寸。一旦你超过这个尺寸,就把你的图像分成更小的四分之一。使用磁盘写入来帮助您远离ram。祝你好运顺便说一下,这个问题很酷=)