android-一个比较深的问题 ,安卓线程 突然挂住了 是不是虚拟机bug

问题描述

一个比较深的问题 ,安卓线程 突然挂住了 是不是虚拟机bug

以下是一段程序 用的MQTT发数据 中间用了fifo
public void publish( String topic, String message, int qos, boolean retained , Context context)
{

Log.e("ZTMQTT.java 632行", "调用到发送函数," + "发送的主题是"+topic);
if(msg_array_block_queue != null)
{
ZTMQTT_msg aZtmqtt_msg=new ZTMQTT_msg();
aZtmqtt_msg.topicString=topic;
aZtmqtt_msg.Msg=message;
aZtmqtt_msg.Quality_of_SerVer=qos;
msg_array_block_queue.offer(aZtmqtt_msg);
Log.e("ZTMQTT.java 682行", "消息已放入fifo" );
}

else
{
Log.e("ZTMQTT.java 683行", "消息队列msg_array_block_queue是空 没法发送" );
}
}

    发送点
    public class msgQueueSendThread extends Thread

{
ZTMQTT_msg aZtmqtt_msg=null;

@Override
// 廖杰增加
public void run()
{
    while (is_a_msgQueueSendThread_start)
    {
        try
        {
             aZtmqtt_msg=msg_array_block_queue.take();//得到要发送的消息
             Log.i("ZTMQTT.java", "771行" + "fifo发送线程离开了阻塞状态");
             if ( client!=null&&client.isConnected() == true&&aZtmqtt_msg!=null)
             {
                 client.publish( aZtmqtt_msg.topicString, aZtmqtt_msg.Msg.getBytes(), MQTT_QUALITY_OF_only_once, false );//这样子发送速度最快了
                 Log.i("ZTMQTT.java", "771行" + "消息发送成功,主题"+aZtmqtt_msg.topicString+",消息"+aZtmqtt_msg.Msg+"fifo中还剩"+msg_array_block_queue.size()+"条没法");
             }
             else
             {
                 Log.i("ZTMQTT.java", "776行,线程msgQueueSendThread,id=" + Thread.currentThread().getId() + "客户端未连接消息发送失败");
             }
             Thread.sleep(interval_of_publish_msg);//发送完一个睡觉100ms
        }
        catch(Exception e)
        {   Log.i("ZTMQTT.java", "781行,线程msgQueueSendThread,id=" + Thread.currentThread().getId() + "消息发送,遇到异常");
            e.printStackTrace();
        }   

    }
    if (msg_array_block_queue != null)
    {
        msg_array_block_queue.clear();
        //msg_array_block_queue = null;
    }
    Log.i("ZTMQTT.java", "线程msgQueueSendThread,id=" + Thread.currentThread().getId() + "被销毁");
}

}
请问什么时候 会线程 挂了 这种问题怎么调试
请问

解决方案

线程挂掉的因素有很多呢,希望你能把出错的问题贴出来,大家一起解决吧,希望能帮到你

时间: 2024-09-15 04:49:27

android-一个比较深的问题 ,安卓线程 突然挂住了 是不是虚拟机bug的相关文章

安卓-android 一个Frgament多个调跳转

问题描述 android 一个Frgament多个调跳转 ![图片说明](http://img.ask.csdn.net/upload/201506/11/1433994287_862810.png 我想实现按button跳转另一个Fragment界面,按返回键可以返回Share界面 解决方案 举例说明吧 一个MainActivity 包含2个Fragment (1和2) 从Fragment1跳转到Fragment2 MainActivity 定义一个public函数 public void g

安卓线程中 stopSelf();和ondestroy()的区别

问题描述 安卓线程中 stopSelf();和ondestroy()的区别 在runnable分别加入ondestroy()和stopself(); 在断点中下面的代码都执行了, 但是再一次startservice(线程)的时候前者提示Thread is started异常, 后者则正常 @Override public void onDestroy(){ super.onDestroy(); ListData.interrupt(); } 解决方案 interrupt()并不会真正结束掉线程.

android-现在进行一个类似今日头条的安卓开发,需要在详情页实现类似微信点赞功能,求指导。(有数据同步的)

问题描述 现在进行一个类似今日头条的安卓开发,需要在详情页实现类似微信点赞功能,求指导.(有数据同步的) 现在进行一个类似今日头条的安卓开发,需要在详情页实现类似微信点赞功能,求指导.(有json数据传输的) 解决方案 http://blog.csdn.net/zhaizu/article/details/48103351 解决方案二: android 点赞功能 http://www.apkbus.com/android-173249-1-1.html 解决方案三: http://blog.cs

socket-如何解决android息屏休眠,影响了线程的运行

问题描述 如何解决android息屏休眠,影响了线程的运行 我在写一个即时聊天软件,开了两个子线程,分别用来发送和接收. 发送线程定时发送心跳包,并定时轮训发送队列. 接收线程中包含了接收程序与断线重连程序. 手机在屏幕打开时一切正常,只要锁屏并拔掉数据线,手机进入休眠,那两个线程就会出现问题.并不是简单的彻底停止.举个栗子,心跳包停止发送,一段时间后服务端把它踢下线,然后发送线程开始重连socket,但是连接上之后,心跳包又停止发送,如此反复. 我将这两个线程放在service中去创建,没有用

动画效果-android 一个旋转动画的效果,未完全展示

问题描述 android 一个旋转动画的效果,未完全展示 ndroid,我对一个按钮button做点击事件,点击button后将一张图片旋转90度,但是频繁点击的过程中,总会有几次图片没有旋转到90度,或者压根就没有旋转. 我在旋转动画的监听onAnimationEnd()方法里面,输出了debug,代码确实执行到这里了,为什么执行动画后,页面效果看不见. 请有经验和知道状况的朋友,指导下,谢谢 解决方案 最好用属性动画做,如果是需要完整执行每个点击响应就每次都起个线程post到ui进程来做动画

android中UI主线程与子线程深入分析_Android

本文较为深入的分析了android中UI主线程与子线程.分享给大家供大家参考.具体如下: 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process. 一个Android 程序默认情况下也只有一个Process,但一个Pr

Android开发之旅:进程与线程

引言 当应用程序的组件第一次运行时,Android将启动一个只有一个执行线程的Linux进程.默认,应用程序所有的组件运行在这个进程和线程中.然而,你可以安排组件运行在其他进程中,且你可以为进程衍生出其它线程.本文从下面几点来介绍Android的进程与线程: 1.进程 2.线程 2.1.远程过程调用(Remote procedure calls,RPCs) 2.2.线程安全方法 1.进程 组件运行于哪个进程中由清单文件控制.组件元素--<activity>.<service>.&l

android中UI主线程与子线程深入分析

本文较为深入的分析了android中UI主线程与子线程.分享给大家供大家参考.具体如下: 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process. 一个Android 程序默认情况下也只有一个Process,但一个Pr

Windows系统中一个进程可以允许最大的线程数

默认情况下,一个线程的栈要预留1M的内存空间 而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程 但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小. 你也可以通过连接时修改默认栈大小,将其改的比较小,这样就可以多开一些线程. 如将默认栈的大小改成512K,这样理论上最多就可以开4096个线程. 即使物理内存再大,一个进程中可以起的线程总要受到2GB这个内存空间的限制. 比方说你的机器装了64GB物理内存,但每个进程的内存空间还是4GB,其中用户态可用