分享

Android Application Thread CPU GC Operatiing and OOM Question 0603

 写意人生 2016-01-13
    @Override
    public void run() {
        while(true){
            try {
                SettingLocationTime();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
     
    private void SettingLocationTime() throws InterruptedException{
        if(handler!=null){
            SendMessage(post_data);
            time = setting_time>0?setting_time:default_time;
//          Log.i(TAG, TAG+" SettingLocationTime() time:"+time);
            Thread.sleep(time*1000);
        }
    }
    /**
     * 可以把Bundle放在class被加载的地方,实例化这个对象
     * 装载完一次数据之后,下次调用之前执行clear()函数即可,此时的bundle对象就相当于一个铁碗
     * 每次装不同的水而已,就避免了每次开辟新的内存空间来存放Bundle对象
     * Message 对象就更简单了,因为我这类回调了一个Handler对象过来,我们可以直接
     * 调用Handler对象的obtainMessage()函数,这个函数当Handler被创建时,不管你用不用,它都在那里
     * 随Handler消亡而消亡,不需要实例化,不需要创建,可以直接取出来用,这又避免了每次开辟新的内存空间
     * 来装载Message对象,obtainMessage() 函数 来自 MessagePool
     * **/
    private void SendMessage(byte[]data){
        bundle.clear();// 倒掉碗里的老水(清空之前的缓存),装新来的水(填充来自回调函数的新数据)
        byte[]_data=ByteParseBeanTools.PostProtocolByte(
                ByteProtocolSessionType.LOCATION_STATE_SEND, data);
        Message msg = handler.obtainMessage();  // 来自 MessagePool
        msg.what=MainSessionUtil.SEND_POST_BYETS_DATA;
        bundle.putByteArray(MainSessionUtil.BYTES_DATA_KEY, _data);// 装新的水(填充新的数据源)
        msg.setData(bundle);
        handler.sendMessage(msg);
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多