当前位置:  编程技术>移动开发
本页文章导读:
    ▪listview总结        listview小结1 listview中的修改与删除:          删除:remove(arg2);arg2为在listview中要删除数据的位置。                      adapter.notifyDataSetChange();更新当前listview        .........
    ▪ Java I/O源-PipedInputStream、PipedOutputStream        Java I/O流-PipedInputStream、PipedOutputStream一、整体代码图        PipedStreamDemo.java import java.io.*; class PipedStreamDemo { public static void main(String[] args) throws Exception { PipedInputStream pin = new.........
    ▪ 利用TraceView回观察ListView的getView性能       利用TraceView来观察ListView的getView性能 来源http://www.oschina.net/question/157182_45912 参考http://developer.android.com/tools/debugging/debugging-tracing.html 一、 首先啥都不做: public View getView(int position, View conve.........

[1]listview总结
    来源: 互联网  发布时间: 2014-02-18
listview小结

1 listview中的修改与删除:

         删除:remove(arg2);arg2为在listview中要删除数据的位置。

                     adapter.notifyDataSetChange();更新当前listview

         修改:listview.add(arg2,map);将新的数据加载到当前位置。

                    adapter.notifyDataSetChange();更新当前listview

2 listview拖动时背景黑色问题(有时直接用触摸屏拖动视图时会发现listview的背景一片黑色。而且所有被选中的文字都变成一片漆黑。)这个问题在于listview缓存颜色机制,因此我们可以通过设置缓存颜色为透明的方法来解决。

         法1:通过布局属性来设定(listview的属性中直接定义)android:cacheColorHint = "#000000"

         法2:在代码中设定 listview.setCacheColorHint(Color.TRANSPARENT);

3 listview中的属性功能:

        a : divider属性:用来设置每一项之间需要设置一个图片作为间隔,或是去掉item之间的分割线 android:divider = "@drawable/list_dirver"其中@drawable/list_dirver是一个图片资源,如果不想显示分割线则子要设为:android:divider = "@drawable/@null"即可。

        b:fadingEdge属性:上边和下边有黑色的阴影。android:fadingEdge = "none"设置之后就没有阴影了。

        c:scrollbars属性:隐藏listview滚动条。android:scrollbars = "none"与setVerticalScrollBarEnabled(true);的效果是一样的。不活动/活动的时候都隐藏。

        d:fadescrollbars属性:android:fadescrollbars = "true"配置listview布局的时候,设置这个属性为true就可以实现滚动条的自动隐藏和显示。

        e:stackFromBottom属性:设置好该属性之后你做好的列表就会显示你列表的最下面,值为true和false

android:stackFromBottom="true"

        f:transciptMode属性,需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。android:transcriptMode="alwaysScroll"   

      e:setSelection(position):记录listView显示在屏幕上的第一个item的位置,然后利用listView.setSelection恢复。打开一个listview的时候能够自动设置显示的位置, setSelection(int pos)可以设置显示的位置.

本文档有待补充。



    
[2] Java I/O源-PipedInputStream、PipedOutputStream
    来源: 互联网  发布时间: 2014-02-18
Java I/O流-PipedInputStream、PipedOutputStream

一、整体代码图

       PipedStreamDemo.java

import java.io.*;

class PipedStreamDemo            
{
  public static void main(String[] args)  throws Exception
  {
    PipedInputStream pin = new PipedInputStream();
    PipedOutputStream pout = new PipedOutputStream();
    pin.connect(pout);  //输入流与输出流连接
    
    ReadThread readTh   = new ReadThread(pin);
    WriteThread writeTh = new WriteThread(pout);
    new Thread(readTh).start();
    new Thread(writeTh).start();
  }
  
  public static void sop(Object obj) //打印
  {
    System.out.println(obj);
  }
}

class ReadThread implements Runnable
{
  private PipedInputStream pin;
  ReadThread(PipedInputStream pin)   //
  {
    this.pin=pin;
  }
  
  public void run() //由于必须要覆盖run方法,所以这里不能抛,只能try
  {
    try
    {
      sop("R:读取前没有数据,阻塞中...等待数据传过来再输出到控制台...");
      byte[] buf = new byte[1024];
      int len = pin.read(buf);  //read阻塞
      sop("R:读取数据成功,阻塞解除...");
      
      String s= new String(buf,0,len);
      sop(s);    //将读取的数据流用字符串以字符串打印出来
      pin.close();     
    }
    catch(Exception e)
    {
      throw new RuntimeException("R:管道读取流失败!");
    }   
  }
  
  public static void sop(Object obj) //打印
  {
    System.out.println(obj);
  }
}

class WriteThread implements Runnable
{
  private PipedOutputStream pout;
  WriteThread(PipedOutputStream pout)
  {
    this.pout=  pout;
  }
  
  public void run()
  {
    try
    {
      sop("W:开始将数据写入:但等个5秒让我们观察...");
      Thread.sleep(5000);  //释放cpu执行权5秒
      pout.write("W: writePiped 数据...".getBytes());  //管道输出流
      pout.close();
    }
    catch(Exception e)
    {
      throw new RuntimeException("W:WriteThread写入失败...");
    }
  }
  
  public static void sop(Object obj) //打印
  {
    System.out.println(obj);
  }
}



  

二、解释

        

        代码地址:https://github.com/jltxgcy/Demo


    
[3] 利用TraceView回观察ListView的getView性能
    来源: 互联网  发布时间: 2014-02-18
利用TraceView来观察ListView的getView性能

来源http://www.oschina.net/question/157182_45912

参考http://developer.android.com/tools/debugging/debugging-tracing.html

一、 首先啥都不做:

public View getView(int position, View convertView, ViewGroup parent) {  
        // TODO Auto-generated method stub  
        LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.listview, null);  
        TextView text = (TextView) layout.findViewById(R.id.text);  
        ImageView view= (ImageView) layout.findViewById(R.id.iamge);  
          
        text.setText(listData.get(position));  
        int id= position %2==1? R.drawable.icon: R.drawable.default_head;  
        view.setImageResource(id);  
          
        return layout;  
    }  

    运行程序,然后随意的拖动listview 列表,然后安菜单键退出程序:去ddms 中fileExplorer中 点击sd卡 你会早根目录上看到dmtrace.trace 文件,把dmtrace.trace 导出到C盘 ,命令行键入android tools 文件夹下 执行traceview C:\dmtrace.trace,出现了traceview视图。

    因为咋门看到的是getview优化操作:所以直接在Find: 键入getView 他则会找到我们写的程序的方法:


    看到没有:未进行优化的情况下:getView占用资源是 35.2%   其中布局填充(inflate)占其中的89.7%    整个程序中inflated 就占33%,getView()方法就是全被布局填充耗费了这么多的资源, 看不下去了。

二、优化一

    直接加两行代码 

     

if(convertView ==null){  
        layout = (LinearLayout) inflater.inflate(R.layout.listview, null);  
    }else{  
        layout =(LinearLayout) convertView;  
    }  
 



    看到没有,看到没有:9.4%  占整个程序的9.4% ,并且 inflated 在getview中只耗费了41.7%了,一半多的节省啊!

    两行的代码就带来这么大的效率提高: 难道你没觉察到! 神奇

 

三、优化二

     下面是网上盛传的:ViewHolder 优化测试,通过setTAG   

public View getView(int position, View convertView, ViewGroup parent) {  
        // TODO Auto-generated method stub  
//      LinearLayout layout;  
//      if(convertView ==null){  
//          layout = (LinearLayout) inflater.inflate(R.layout.listview, null);  
//      }else{  
//          layout =(LinearLayout) convertView;  
//      }  
//        
//      TextView text = (TextView) layout.findViewById(R.id.text);  
//      ImageView view= (ImageView) layout.findViewById(R.id.iamge);  
//        
//      text.setText(listData.get(position));  
//      int id= position %2==1? R.drawable.icon: R.drawable.default_head;  
//      view.setImageResource(id);  
          
         ViewHolder holder;  
         if (convertView == null) {  
             convertView = inflater.inflate(R.layout.listview,  
                     null);  
             holder = new ViewHolder();  
             holder.view = (ImageView) convertView.findViewById(R.id.iamge);  
             holder.text = (TextView) convertView.findViewById(R.id.text);  
             convertView.setTag(holder);  
         }  
         else{  
             holder = (ViewHolder)convertView.getTag();  
         }  
         int id= position %2==1? R.drawable.icon: R.drawable.default_head;  
         holder.view.setImageResource(id);  
         holder.text.setText(listData.get(position));  
  
          
        return convertView;  
    }  
     static class ViewHolder {  
            TextView text;  
            ImageView view;  
        }  


   可以,性能并未提高多少。 



    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
oracle iis7站长之家
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3