起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6869|回复: 10

[结贴] 用x5开发的界面用于定时刷新数据累积占用内存怎么清理

  [复制链接]

6

主题

29

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
发表于 2015-12-25 13:54:12 | 显示全部楼层 |阅读模式
如题,我用Wex5开发的一个android界面,功能就是每隔几秒刷新数据显示,每次显示10条记录,每次刷新前,会对 data执行clear()操作,原以为这样会清除掉内存中数据,但发现程序运行一段时间后,系统内存占用会越累积超多,最终会造成程序死机退出。
请问wex5开发android 怎么处理内存占用问题?

6

主题

29

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2015-12-29 18:43:23 | 显示全部楼层
楼上的方法我试了两天,内存占用还是在一直增长,好像这个只是清除缓存
回复 支持 1 反对 0

使用道具 举报

发表于 2015-12-25 14:10:47 | 显示全部楼层
可以参考3.3版本中的案例,有清除缓存的设置
/UI2/demo/native/clearCache/index.w
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

发表于 2015-12-29 18:50:04 | 显示全部楼层
halenwyh 发表于 2015-12-29 18:43
楼上的方法我试了两天,内存占用还是在一直增长,好像这个只是清除缓存

请问你的资源打打包到app中的吗?如果打包到app中,访问新页面的时候会使用本地资源,应该增加内存会比较少!如果资源是从服务器下载的!访问的页面多了,缓存的页面也多了!自然内存就增加了!
另外,请试试我们平台的案例,是否会出现内存一直增长的情况呢?
http://wex5.com/cn/appstore/

再问下,你的应用,页面跳转方式是什么?是使用的shell跳转吗?就像仿途牛那样
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

29

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2015-12-29 19:05:40 | 显示全部楼层
我这个应用没有页面跳转,只有一个页面,只是每隔10秒从服务端获取数据,通过jquery方式获取,再把数据绑定到data组件上显示在页面上,每次绑定新的数据前,会调用data.clear() 先清掉原先的数据。
打包选择的模式1。
回复 支持 反对

使用道具 举报

发表于 2015-12-30 09:11:31 | 显示全部楼层
halenwyh 发表于 2015-12-29 19:05
我这个应用没有页面跳转,只有一个页面,只是每隔10秒从服务端获取数据,通过jquery方式获取,再把数据绑定 ...

是内存一直增加??
1.首先你调试看看data组件中行的个数,使用data.count() 就能看到!
你有几个data组件,数据都是变化的吗??建议都看看!
2.你看看你的js代码,有没有调用什么资源,然后一直开启某种资源,但却没有释放资源,
比如你说的10秒中执行一个函数!当你执行另一函数的时候,前一个函数中的变量肯定还是在占用资源的!
你需要保证,没用的资源一定要释放!

qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

29

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2015-12-30 10:56:38 | 显示全部楼层
data组件有2个,其中1个只是记录当用户名,基本没有变化,另一个就是接收每次从服务端获取的数据,获取前都会clear(), data.count()就是新获取的数据的行数;js代码只是通过jquery发送请求,获得json数据绑定在data组件上,没有什么特别的资源占用,更没有图片资源;
页面上的代码是有一个刷新数据的函数,该函数中就是调用js发送请求,得到数据后的成功回调中绑定数据到data组件,同时等待10秒,再次调用这个刷新数据的函数,用这种方式实现定时刷新数据的。
具体代码如下:

Model.prototype.refreshBoard = function() {
   var databoard = this.comp('databoard');
   var me = this;
   var success = function(resultData) {
        debugger;
        databoard.clear();
        databoard.loadData(resultData, true);
        resultData = null;
        databoard.first();
        if (databoard.count() > 0) {
                // 得到数据后等10秒再发请求
                setTimeout(function() {
                        me.refreshBoard();
                }, 10000);
                return;
        }

   };

   var error = function(errmsg) {
       justep.Util.hint(errmsg, {"type" : "danger"});
       // 出错后等10秒再发请求
        setTimeout(function() {
                me.refreshBoard();
        }, 10000);
   };

   //清除缓存////////////////////////////////////////
   document.addEventListener('deviceready', onDeviceReady);
   function onDeviceReady() {
         var success = function(status) {
                        }
         var error = function(status) {
                        }
         window.cache.clear(success, error);
   }

   var param = pageno + ',' + pagesize;
   baseClient.sendRequest({
        "url" : "/carInformationByPage",
        "type" : "get",
        "param" : param,
        "querys" : {},
        "data" : databoard,
        "success" : success,
        "error" : error
   });
}
回复 支持 反对

使用道具 举报

发表于 2015-12-30 11:08:52 | 显示全部楼层
halenwyh 发表于 2015-12-30 10:56
data组件有2个,其中1个只是记录当用户名,基本没有变化,另一个就是接收每次从服务端获取的数据,获取前都 ...

你使用的setTimeout 函数一直重复触发,而且是递归调用 ,却没有机会释放这个资源!这样肯定是有问题的,
你上网搜下setTimeout 和SetInterval的区别
http://www.cnblogs.com/mercy/articles/2424882.html
SetInterval才是一直循环执行的正确使用方法!而且你写代码的时候不要使用递归!
因为你的递归次数树无穷的!所以肯定会内存崩溃的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

6

主题

29

帖子

116

积分

初级会员

Rank: 2

积分
116
QQ
 楼主| 发表于 2015-12-30 11:59:14 | 显示全部楼层
好,我试一下,多谢
回复 支持 反对

使用道具 举报

8

主题

25

帖子

77

积分

初级会员

Rank: 2

积分
77
QQ
发表于 2016-1-5 14:17:00 | 显示全部楼层
setTimeout对象要释放,否则该对象会一直存在。setTimeou它本身返回一个对象,使用js自带的clearTimeout方法(好像是)把无用的timeout对象释放掉。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-5-11 00:48 , Processed in 0.058141 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表