Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 显示图像时不锁定";“主要”;线_Android_Imageview_Android 4.0 Ice Cream Sandwich_Android Imageview - Fatal编程技术网

Android 显示图像时不锁定";“主要”;线

Android 显示图像时不锁定";“主要”;线,android,imageview,android-4.0-ice-cream-sandwich,android-imageview,Android,Imageview,Android 4.0 Ice Cream Sandwich,Android Imageview,我的申请遇到了问题。我正在将一系列内部iPad应用程序从iOS移植到android,图像序列是它们设计中不可或缺的一部分。它们需要标准的全屏停止、启动、暂停功能,所有这些功能在ImageView的子类中都可以正常工作。但在锁定进程对话框持续出现之前,它目前只显示了300幅图像中的2幅 那么,有没有一种“好”的方法可以在不锁定主线程的情况下设置图像/背景呢 仅供参考,animatedravable并不适合我的需要,因为它不提供暂停/恢复功能,而且我拥有的序列数量很容易达到数百个,平均只有几百帧长。

我的申请遇到了问题。我正在将一系列内部iPad应用程序从iOS移植到android,图像序列是它们设计中不可或缺的一部分。它们需要标准的全屏停止、启动、暂停功能,所有这些功能在ImageView的子类中都可以正常工作。但在锁定进程对话框持续出现之前,它目前只显示了300幅图像中的2幅

那么,有没有一种“好”的方法可以在不锁定主线程的情况下设置图像/背景呢


仅供参考,animatedravable并不适合我的需要,因为它不提供暂停/恢复功能,而且我拥有的序列数量很容易达到数百个,平均只有几百帧长。

您可以使用异步加载图像

只需将与图像加载相关的代码放入doInBackground方法中即可 并尝试设置进度条或进度对话框之类的指示器 因此,您将在加载开始时开始显示对话框或栏 完成后,使用onPostExecute方法中的处理程序关闭对话框

示例代码:

 class SomeClass extends Activity {
protected ProgressDialog pd ;
protected Handler handler = new Handler(){
@Override 
public void handleMessage(int what){
   if(pd.isShowing())
      pd.dismiss();
}
     .....

     class LoadImageTask extends AsyncTask<URL, Integer, Long> {
          protected void onPreExecute(Long result) {
            pd = ProgressDialog.show(getContext(),"Title","Message");
         }

         protected Long doInBackground(URL... urls) {

          //Load IMAGEs code
             return totalSize;
         }



         protected void onPostExecute(Long result) {
             //finish loadiing images
              handler .sendEmptyMessage(0);
         }
     }
    }
class SomeClass扩展活动{
保护性帕金森病;
受保护的处理程序=新处理程序(){
@凌驾
公共无效handleMessage(int what){
if(pd.isShowing())
pd.解散();
}
.....
类LoadImageTask扩展了AsyncTask{
受保护的void onPreExecute(长期结果){
pd=ProgressDialog.show(getContext(),“Title”,“Message”);
}
受保护的长doInBackground(URL…URL){
//加载图像代码
返回总大小;
}
受保护的void onPostExecute(长结果){
//完成加载图像
handler.sendEmptyMessage(0);
}
}
}

我希望这能帮助你

对穆罕纳德的回答补充几点:

  • 您不必在AsyncTask中执行,线程就可以了
  • 您可能希望将图像渲染为专用位图,然后使用渲染它以节省在UI线程中渲染所花费的时间

也许我不完全理解这个问题,但是你能在一个单独的线程上运行你的进程,然后跳回主线程来更新UI吗?问题似乎是加载图像需要多长时间。计时器会根据需要不断滴答作响。Uri的解析时间很长,但设置图像似乎需要很长时间。在30分钟内0ish图像URI它在崩溃之前只显示一个或两个图像。此外,UI工具包中存在ImageView,根据文档,我们不能在主线程之外触摸它。