异步获取多数据经验分享

来源:互联网 发布:织梦cms源码 编辑:程序博客网 时间:2024/04/29 04:13

1.异步获取多数据经验分享

  基于以下结构能够实现多数据的异步获取(对时序没有严格的要求)

public class Assist{

   private static final int MAX_TASK_NUM = 5;

   private ArrayList<Msg> mMsgQueue;

   private MyTask[MAX_TASK_NUM] mTaskList;

   private Object mLock;

   private void pushMsg(Msg msg){

      synchronized(mLock){ mMsgQueue .add(msg);}

   }

   private void popMsg(){

      synchronized(mLock){ mMsgQueue .get(0);}
   }

   private void notifyMsg(...){//通知UI更新}

   private class Msg{...}

   private MyTask extends Thread{

      public void run(){

         if(popMsg(!= null)){...; notifyMsg();}

      }

   }

}

 

2.基于现有控件的自定义复杂控件开发

  几个原则:

   1.尽量将自定义的控件继承于常用的布局,如:linearLayout等

   2.将定义了包含控件的layout add进来

   3.自定义控件中尽量不要将控件的大小写为定值

   4.提供尽量合理,简单的接口供主UI线程调用

   5.自定义控件实现的功能尽量单一并易于二次扩展

   6.尽量保留android原生控件中已有的各个状态转换接口

 

3.Intent flag 的几个非常有用的参数

  FLAG_ACTIVITY_CLEAR_TOP

     如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个     这个Activity的实例,而是在这个Activity上方的所有Activity都将关闭

 

      FLAG_ACTIVITY_CLEAR_TASK

      如果给Intent对象添加了这个标记,那么在Activity被启动之前,会导致跟这个Activity      关联的任何既存的任务都被清除

 

     FLAG_ACTIVITY_NO_ANIMATION 

     如果在Intent中设置,并传递给Context.startActivity()的话,这个标志将阻止系统进     入下一个Activity时应用Acitivity迁移动画

 

  FLAG_ACTIVITY_NO_HISTORY

     如果设置,新的Activity将不再历史stack中保留。用户一离开它,这个Activity就关     闭了

 

4.sunTv主要应用问题总结:

1.部分缩略图没有显示成功的问题

  原因:由于是从网络实时获取图片,因此存在由于网络原因而下载失败的可能。

     解决办法:如果没有下载成功,则尝试重新下载,知道尝试的次  数大于一个合理的最大尝试次数。

2.进入move分类中有可能出现的OutOfMemory问题

     原因:解压到图片全不缓存在内存中而没有做及时的清理

     解决办法:在需要下载同一分类的其它图片时,需要先释放掉掉  本分类中已经解码的图片数据。同时当应用退出时,也需要释放    掉所有已经解码的图片数据,回收内存。

3.进入到各个分类后,刷新数据非常慢的问题

     原因:1.单线程获取分类数据 2.只有在所有分类数据都获取完毕后才允许用户操作

     解决办法:1.多线程下载分类数据

                    2.下载前边几个分类数据完成之后即允许用户操作

4.各个分类中按遥控器上键无法显示分类名称的问题

     原因:原生的scrollview在相应向上操作时,先获取下一个可以获得焦点的控件,然后scrollto到该控件的文件使其能够刚好全部显示。而分类名称在该控件的上方,因此无法显示分类的名称来。

     解决办法:重写scrollviewarrowScroll接口,在其相应向上案件部分的代码中向上移动的像素减少一个合适的值即可。

5.开机启动进入桌面,第一次按方向键焦点没有落在下边分类选择gallery上的问题

     原因:开机后多次调用onresume函数造成改控件的focusable属性改变。从而造成requestfocus失败

     解决办法:在requestfocus之前首先判断当前获取处于焦点状态的view,然后判断该view是否为null且是否为该gallery,如果不是,则将galleryfocusable设置成true并让其requestforcus

    

原创粉丝点击