我觉得一般没有响应的话应该是 主线程里面做的事情太多,导致阻塞,你可以new一个子线程,或者这样可以让它响应快一点

解决方案 »

  1.   

    我觉得你也只是说对imageview显示的图片更换而已,这个应该很快的。我以前做的换肤,给一个list每项中的图片都更新一遍,也是很快的,瞬间就完成
      

  2.   

    我觉得你也只是说对imageview显示的图片更换而已,这个应该很快的。我以前做的换肤,给一个list每项中的图片都更新一遍,也是很快的,瞬间就完成
      

  3.   


    我这边是桌面上widget的换肤调用AppWidgetManager.getInstance(context).updateAppWidget (int[] appWidgetIds, RemoteViews views)之后就不由系统自己刷新桌面了,这个刷新的过程比较慢。。
      

  4.   


    我试过对每个需要更新的widget启动一个service来更新,换肤的速度还是一样慢
      

  5.   

    那只有一个widget的话呢,更换速度快吗?
      

  6.   

    1. 检查一下各个widget的刷新时间。
    2. 检查加载图片所需要的时间。
      

  7.   


    加载时间很快,各个widget刷新时间??调用AppWidgetManager.getInstance(context).updateAppWidget (int[] appWidgetIds, RemoteViews views)后怎么去检查刷新时间??
      

  8.   

    刚才试了下,加了5个相同的widget,感觉就是有点卡,但是没有出现没有刷出来的情况。去onUpdate和onReceive里面检查下代码吧。
      

  9.   


    你试试用大点的图片去换肤,同时换5个的话是不是有部分WIDGET没刷出来
      

  10.   

    图片:大小1000*1000,图片大小27.1K,图片类型png。过程:同时设置了4个widget换图,换图周期1秒。效果:开始比较流畅,后面会有渐次替换的延时,等待10分钟后,依然能换图,但是没有出现图片无法载入的情况。附上我换图的代码:
            mRefreshRunnable = new Runnable() {
                @Override
                public void run() {
                    if(null != mViews){
                        if(1 == mIndex % 2){
                            mViews.setImageViewResource(R.id.test, R.drawable.test);
                        }else{
                            mViews.setImageViewResource(R.id.test, R.drawable.test1);
                        }
                        mIndex++;
                        updateWidget();
                    }
                    mHandler.postDelayed(mRefreshRunnable, 1000);
                }
            };    private void updateWidget(){
            final AppWidgetManager awm = AppWidgetManager.getInstance(mContext);
            awm.updateAppWidget(WIDGET_NAME, mViews);
        }
      

  11.   

    是不是可以指定刷新区域,只刷新ImageView区域?那样就会快些吧。
      

  12.   


    可以啊
    mViews.setImageViewResource(R.id.test, R.drawable.test);
    这句就是只会更新id为test的imageView图片。
      

  13.   

    Thanks.
    还有就是每次刷新和最后一次刷新的区别,是每次刷新快还是最后一次刷新好?要看具体情况觉得用哪种方法?
      

  14.   


    我的情况是,只刷新7个widget的一张图片是很快,但刷widget上的7个imageView图片,这样算起来就有7*7=49张图片了
      

  15.   


    分析了下LOG信息
    08-27 14:49:39.715: DEBUG/dalvikvm(23314): GC freed 19233 objects / 1125824 bytes in 102ms
    08-27 14:49:39.735: ERROR/Scratchpad(23314): appWidgetId 1:434
    08-27 14:49:39.735: ERROR/Scratchpad(23314): appWidgetId 2:435
    08-27 14:49:39.735: ERROR/Scratchpad(23314): appWidgetId 3:436
    08-27 14:49:40.245: DEBUG/dalvikvm(100): GC freed 17224 objects / 1209944 bytes in 297ms
    08-27 14:49:40.355: ERROR/JavaBinder(100): !!! FAILED BINDER TRANSACTION !!!
    08-27 14:49:40.565: DEBUG/dalvikvm(19229): GC freed 4612 objects / 222896 bytes in 166ms
    08-27 14:49:40.845: DEBUG/dalvikvm(23314): GC freed 1787 objects / 141624 bytes in 85ms
    出现了一个08-27 14:49:40.355: ERROR/JavaBinder(100): !!! FAILED BINDER TRANSACTION !!!
    更新三个WIDGET,其中一个出现FAILED BINDER TRANSACTION !,这个WIDGET就没有更新
    查了下相同的问题
    http://osdir.com/ml/Android-Developers/2010-01/msg00673.html
    这个最后的结果没看懂,版主大牛有什么看法??
      

  16.   


    哈哈,解决了,查到的资料分享下,以便有人遇到
    http://hi.baidu.com/tigerpan/blog/item/26305963df32f949ebf8f843.html
    按这资料的解决办法,我作了如下修改//修改前
    AppWidgetManager.getInstance(context).updateAppWidget(
    appWidgetIds,buildView(context, getAllScratchpad(context),isChangeSkin));//修改后
    for(int i=0;i<appWidgetIds.length;i++){
    int appWidgetId = appWidgetIds[i];
    RemoteViews remoteViews = buildView(context, getAllScratchpad(context), isChangeSkin);
    AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId,remoteViews);
    }