打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Android 中线程网络超时的处理
import java.util.Timer; 
import java.util.TimerTask; 
   
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
   
public class MainActivity extends Activity { 
    private static final int TIME_OUT = 0
    private static final int SUCCESS = 1
    // 超时的时限为5秒 
    private static final int TIME_LIMIT = 5000
    ProgressDialog proDialog; 
    Timer timer; 
    Thread thread; 
    Button btn1, btn2; 
   
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        btn1 = (Button) findViewById(R.id.button1); 
        btn2 = (Button) findViewById(R.id.button2); 
        // 测试未超时的线程,为btn1绑定事件 
        btn1.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                proDialog = ProgressDialog.show(MainActivity.this, "提示"
                        "线程运行中"); 
                // 匿名内部线程 
                thread = new Thread() { 
                    @Override 
                    public void run() { 
                        while (true) { 
                            try
                                //线程休眠时间,超时 
                                sleep(10000); 
                            } catch (InterruptedException   e) { 
                                break
                            
                        
   
                    
                }; 
                thread.start(); 
                // 设定定时器 
                timer = new Timer(); 
                timer.schedule(new TimerTask() { 
                    @Override 
                    public void run() { 
                        sendTimeOutMsg(); 
                    
                }, TIME_LIMIT); 
   
            
        }); 
        // 测试超时的线程,为btn2绑定事件 
        btn2.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) { 
   
                proDialog = ProgressDialog.show(MainActivity.this, "提示"
                        "线程运行中"); 
                // 匿名内部线程 
                thread = new Thread() { 
                    public void run() { 
                        try
                            // 线程休眠时间,未超时 
                            Thread.sleep(3000); 
                        } catch (InterruptedException e) { 
                            e.printStackTrace(); 
                        
                        Message msgSuc = new Message(); 
                        msgSuc.what = SUCCESS; 
                        myHandler.sendMessage(msgSuc); 
                    
                }; 
                thread.start(); 
                // 设定定时器 
                timer = new Timer(); 
                timer.schedule(new TimerTask() { 
                    @Override 
                    public void run() { 
                        sendTimeOutMsg(); 
                    
                }, TIME_LIMIT); 
            
        }); 
    
    // 接收消息的Handler 
    final Handler myHandler = new Handler() { 
        public void handleMessage(android.os.Message msg) { 
            switch (msg.what) { 
            case TIME_OUT: 
                //打断线程 
                thread.interrupt(); 
                proDialog.dismiss(); 
                Toast.makeText(MainActivity.this, "线程超时", Toast.LENGTH_SHORT) 
                        .show(); 
                break
            case SUCCESS: 
                //取消定时器 
                timer.cancel(); 
                proDialog.dismiss(); 
                Toast.makeText(MainActivity.this, "线程运行完成", Toast.LENGTH_SHORT) 
                        .show(); 
                break
            default
                break
            
        }; 
    }; 
    //向handler发送超时信息 
    private void sendTimeOutMsg() { 
        Message timeOutMsg = new Message(); 
        timeOutMsg.what = TIME_OUT; 
        myHandler.sendMessage(timeOutMsg); 
    
   
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android-使用mediarecorder类获取当前麦克风音量值
Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连
Java实现定时任务的三种方法
Android系统中的广播(Broadcast)机制简要介绍和学习计划
支付宝咻一咻自动无限快速点击的实现
Android中Message机制的灵活应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服