博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android UI之button异步处理
阅读量:6818 次
发布时间:2019-06-26

本文共 2729 字,大约阅读时间需要 9 分钟。

hot3.png

在做界面时候,我们经常用到button,但是好多时候我们直接把响应事件写在在了Onclick函数里面。但是这样做的坏处就是占用了ui线程。如果是请求数据库或者是进行网络数据请求,那么这样做可能会有点得不偿失。

Button testButton = new Button(this);

testButton .setOnClickListener(new OnclickListener(){

           public void onClick(View view){

                // do something

           }

        });

所以在UI处理的时候,我们应该尽量做到异步处理。也就是起我们自己的处理线程。

import android.content.*;

import android.graphics.*;
import android.net.*;
import android.os.Handler;
import android.os.Message;
import android.view.*;
import android.widget.*;

import com.sc.lib.Base64;

import com.sc.lib.ui.BusyDialog;
import com.sc.netvision.TopCommander;
import com.sc.netvision.Utils;
import com.sc.netvision.xml.*;

public class videoPlay extends LinearLayout implements

          Runnable ,View.OnClickListener{
    private VideoView mPlayer = null;
    private String path = null;
    private Button playButton = null;
    private BusyDialog dlgBusy = null;
 private final int FAILCONNECTSERVER = 1;
 private final int PLAYMEDIAVIEW = 20;
 
    public ClipVideoPlay( Context context, String loadPath) {
 
  super(context);
  initial( context);
  path = loadPaht;
  
 }
  private Handler  uiHandler = new Handler()  {
 
  public void handleMessage(Message msg) {
   try {
    switch (msg.what) {
     case FAILCONNECTSERVER:
      Toast.makeText(currentContext, "Can not connect to server",
               Toast.LENGTH_SHORT).show();
      break;     
     case PLAYMEDIAVIEW:
      playMedia(currentContext);
     default:
      super.handleMessage(msg);
      break;
    }
   } finally {
    dlgBusy.cancel();
   }
  }
 };
    public void onClick(View view) {
     // TODO Auto-generated method stub
     isPlay = false;
     if(view == playButton) {
      dlgBusy = BusyDialog.showBusyDialog(currentContext, "Please wait", "Returning ...");
      new Thread(this).start();
     }
    }
 
    public void run() {
     // TODO Auto-generated method stub
     Message msg = new Message();  
  try {
  
   msg.what = PLAYMEDIAVIEW; 
  
  } finally {
   
   uiHandler.sendMessage(msg);
  }   
    }
   private void initial( Context context) {
 
   setOrientation(VERTICAL);
  currentContext = context;
  clipList = clips;
  deviceName = devName;
  
  
  playButton = new Button(context);
  playButton.setOnClickListener(this);     
  path = URL;
  mPlayer = new VideoView(context);
  
  addView(playButton,new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.FILL_PARENT,
      LinearLayout.LayoutParams.WRAP_CONTENT));
  addView(addPlayTitle(context));
  addView(mPlayer,new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.FILL_PARENT,
      LinearLayout.LayoutParams.FILL_PARENT));
  setGravity(Gravity.CENTER);      
 }
  
   
 private void playMedia(Context context) {
   String uriPath = path ;
  Uri uri = Uri.parse(uriPath);
  MediaController controller = new MediaController(context);
  controller.show();
  mPlayer.setMediaController(controller);
  mPlayer.setVideoURI(uri);
  mPlayer.requestFocus();
  mPlayer.start();
    }

}

代码不能直接运行。 但是思想是这个思想。另起一个线程去获取网络数据,进行播放。这样可以快速响应事件。

转载于:https://my.oschina.net/u/138169/blog/16692

你可能感兴趣的文章
JPA(四)之实体关系一对一
查看>>
如何使用羊驼自动生成缩略图的功能。
查看>>
定制化Azure站点Java运行环境(1)
查看>>
inotify用法简介及结合rsync实现主机间的文件实时同步
查看>>
php 判断手机登陆
查看>>
git 问题
查看>>
Fedora18设置终端快捷键 和 桌面快捷方式
查看>>
取消NavigationBar左右两边的空隙
查看>>
修改symfony sfDoctrineGuardPlugin验证密码的方法
查看>>
mysql 创建日期列之timestamp
查看>>
Visual Studio统计有效代码行数
查看>>
Qt连接Oracle数据库常见问题
查看>>
45个实用的JavaScript技巧、窍门和最佳实践
查看>>
sqlserver 2005 列字符串拼接
查看>>
用面向接口编程思想看找对象
查看>>
TWaver GIS在电信中的使用
查看>>
5 Servlet
查看>>
百度创始人李彦宏:要做最好的中文搜索引擎
查看>>
JavaScript强化教程-cookie对象
查看>>
MEMCACHE常用的命令
查看>>