展会信息港展会大全

android UI之button异步处理
来源:互联网   发布日期:2015-12-04 16:26:22   浏览:1321次  

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

在做界面时候,我们经常用到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 HandleruiHandler = 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();

}

}

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

赞助本站

人工智能实验室

相关热词: 异步 UI

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港