当前位置:  编程技术>移动开发
本页文章导读:
    ▪应用自定义的Adapter        使用自定义的Adapter 使用自定义的Adapter   关键字 UI XML Adapter ListView 日期 2010/6/4   关于性能使用convertView 回收试图,性能提高200% 使用ViewHolder 性能再提高50% 继承BaseAdapter 类 实现.........
    ▪ 运用线程更新UI        使用线程更新UI   使用线程更新UI   关键字 Thread 线程 停止 日期 2010/7/31   简述 当第一次启动一个Android 程序时,Android 会自动创建一个称为“main” 主线程的线程。这个主线程(.........
    ▪ Bit地图 Drawable相互转换       Bitmap Drawable相互转换    一、Bitmap转Drawable   Bitmap bm=xxx; //xxx根据你的情况获取  BitmapDrawable bd=new BitmapDrawable(bm);   Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即.........

[1]应用自定义的Adapter
    来源: 互联网  发布时间: 2014-02-18
使用自定义的Adapter

使用自定义的Adapter

 

关键字 UI XML Adapter ListView

日期 2010/6/4

 

关于性能使用convertView 回收试图,性能提高200%

使用ViewHolder 性能再提高50%

继承BaseAdapter 类 实现其中的方法,注意getView() ,其中是最重要的一个重写方法。

其中使用LayoutInflater 将一个xml 解释为一个View ,然后将传来的数据存入View 中。

 

可以使用itemAdapter .notifyDataSetChanged();通知Adapter 内容已经改变 进行刷新

 

package com.shinestudio.hexcoversion.adapter;

import java.util.List;

import java.util.Map;

public class ItemAdapter extends BaseAdapter {

       static class ItemViewHolder {
              TextView t_ori;
              TextView t_bin;
              TextView t_dec;
              TextView t_hex;
       }

       private static LayoutInflater inflater;
       private String[] tag;
       private List<Map<String, String>> data;
 
       public ItemAdapter(Context context, String[] tag, List<Map<String, String>> data) {
              inflater = LayoutInflater.from(context);
              this.tag = tag;
              this.data = data;
       }

       @Override

       public int getCount() {
              return data.size();
       }

       @Override
       public Object getItem(int position) {
              return data.get(position);
       }

       @Override
       public long getItemId(int position) {
              return position;
       }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
              ItemViewHolder holder;
              if (convertView == null) {
                     convertView = inflater.inflate(R.layout.listitem, null);
                     holder = new ItemViewHolder();
                     holder.t_ori = (TextView) convertView.findViewById(R.id.tv_ori);
                     holder.t_bin = (TextView) convertView.findViewById(R.id.tv_bin);
                     holder.t_dec = (TextView) convertView.findViewById(R.id.tv_dec);
                     holder.t_hex = (TextView) convertView.findViewById(R.id.tv_hex);
                     convertView.setTag(holder);
              } else {
                     holder = (ItemViewHolder) convertView.getTag();
              }
              holder.t_ori.setText((String) data.get(position).get(tag[0]));
              holder.t_bin.setText((String) data.get(position).get(tag[1]));
              holder.t_dec.setText((String) data.get(position).get(tag[2]));
              holder.t_hex.setText((String) data.get(position).get(tag[3]));
              return convertView;
       }
}
 

 


    
[2] 运用线程更新UI
    来源: 互联网  发布时间: 2014-02-18
使用线程更新UI

 

使用线程更新UI

 

关键字 Thread 线程 停止

日期 2010/7/31

 

简述

当第一次启动一个Android 程序时,Android 会自动创建一个称为“main” 主线程的线程。这个主线程(也称为UI 线程)很重要,因为它 负责把事件分派到相应的控件,其中就包括屏幕绘图事件,它同样是用户与Andriod 控件交互的线程。比如,当你在屏幕上按下一个按钮后,UI 线程会把这 个事件分发给刚按得那个按钮,紧接着按钮设置它自身为被按下状态并向事件队列发送一个无效(invalidate )请求。UI 线程会把这个请求移出事件队 列并通知按钮在屏幕上重新绘制自身。

 

单线程模型会在没有考虑到它的影响的情况下引起Android 应用程序性能低下,因为所有的任务都在同一个线程中执行,如果执行一些耗时的操作,如 访问网络或查询数据库,会阻塞整个用户界面。当在执行一些耗时的操作的时候,不能及时地分发事件,包括用户界面重绘事件。从用户的角度来看,应用程序看上 去像挂掉了。更糟糕的是,如果阻塞应用程序的时间过长(现在大概是5 秒钟)Android 会向用户提示一些信息,即打开一个“ 应用程序没有相应 (application not responding )” 的对话框。

 

如果你想知道这有多糟糕,写一个简单的含有一个按钮的程序,并为按钮注册一个单击事件,并在事件处理器中调用这样的代码 Thread.sleep(2000) 。在按下这个按钮这后恢复按钮的正常状态之前,它会保持按下状态大概2 秒钟。如果这样的情况在你编写的应用程序中发 生,用户的第一反应就是你的程序运行很慢。

 

现在你知道你应该避免在UI 线程中执行耗时的操作,你很有可能会在后台线程或工作者线程中执行这些耗时的任务,这样做是否正确呢?让我们来看一个例子,在这个例子中按钮的单击事件从网络上下载一副图片并使用ImageView 来展现这幅图片。代码如下:

 

 

public void onClick(View v){
    new Thread( new Runnable(){
        public void run(){
            Bitmap b = loadImageFromNetwork();
            mImageView.setImageBitmap(b);
        }
    }).start();
}
 

  这段代码好像很好地解决了你遇到的问题,因为它不会阻塞UI 线程。很不幸,它违背了单线程模型:Android UI 操作并不是线程安全的并且这些操作必须在UI 线程中执行。

 

使用Handler 来更新UI

建立一个线程,设一个boolean 变量来控制线程的运行,当收到被调用 interrupt() 时就产生InterruptedException 异常,catch 异常后改变变量,这样就可以停止线程了。

 

private Thread thread = new Thread() {
       @Override
       public void run() {
              boolean running = true;
              while (running) {
                     try {
                            settime.sendMessage(settime.obtainMessage());
                            Thread.sleep(1000);
                     } catch (InterruptedException e) {
                            Log.d("Thread", "Exception");
                            running =false;
                     }
              }
       }
};

 

Handler 可以认为是消息队列,线程发送消息,主线程中的Handler 收到消息,更新UI ,这样就避免了UI 在线程中被更新。

 

private Handler settime = new Handler() {
       Time t = new Time();
       String time = new String();
       @Override
       public void handleMessage(Message msg) {
              super.handleMessage(msg);
              t.setToNow();
              tv_time.setText(time.format("%2d:%2d %d", t.hour, t.minute, t.second));
       }
};

 

调用interrupt() 以停止线程运行

 

 

b_cancel.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
              thread.interrupt();
       }
});

    
[3] Bit地图 Drawable相互转换
    来源: 互联网  发布时间: 2014-02-18
Bitmap Drawable相互转换

   一、Bitmap转Drawable

  Bitmap bm=xxx; //xxx根据你的情况获取
  BitmapDrawable bd=new BitmapDrawable(bm);

  Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。

   二、 Drawable转Bitmap

  转成Bitmap对象后,可以将Drawable对象通过Android的SK库存成一个字节输出流,最终还可以保存成为jpg和png的文件。

Drawable d=xxx; //xxx根据自己的情况获取drawable
BitmapDrawable bd = (BitmapDrawable) d;
Bitmap bm = bd.getBitmap();

 最终bm就是我们需要的Bitmap对象了。


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪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