帖子
帖子
用户
博客
课程
12
返回列表 发新帖
16
帖子
0
勋章
38
Y币
主函数 发表于 2017-4-2 11:59
报什么错?截图我看看呢。

弹出框出来后,程序就立刻退出了
21
帖子
4
勋章
1万+
Y币
Erondra 发表于 2017-4-2 12:27
图不知道怎么发,就是很简单的一个弹出框
然后上面写着
---------------------------

整个APP崩溃了呀。。
APP崩溃的话,一般都是你用了某个模块里面,然后模块的初始化或者传递的参数出问题了。。。。里面用过什么模块?检查一下是否哪个参数有错。
16
帖子
0
勋章
38
Y币
主函数 发表于 2017-4-2 12:47
整个APP崩溃了呀。。
APP崩溃的话,一般都是你用了某个模块里面,然后模块的初始化或者传递的参数出问题 ...

找到原因了,但是解决不了

openWin和openFrame的时候,如果在apiready里加入动态刷新页面body的功能,有概率会出现黑屏、白屏、app崩溃。
在动态刷新页面的代码加入settimeout 300ms或600ms可以降低这个概率,但是不能完全消灭崩溃现象。
但加入settimeout会出现另一个问题,如果openWin后立即closeWin,closeWin也会概率出现黑屏、白屏、app崩溃。

应该是窗口切换和html刷新动画之间有冲突,窗口切换期间,窗口内的html必须没有在加载才行

但我不知道怎么解决,请教怎么办
21
帖子
4
勋章
1万+
Y币
Erondra 发表于 2017-4-2 21:59
找到原因了,但是解决不了

openWin和openFrame的时候,如果在apiready里加入动态刷新页面body的功能,有 ...

怎么个动态刷新Body的功能?发出来我看看呢。。
16
帖子
0
勋章
38
Y币
本帖最后由 Erondra 于 2017-4-3 10:35 编辑
主函数 发表于 2017-4-2 23:29
怎么个动态刷新Body的功能?发出来我看看呢。。

打开页面时的崩溃问题解决了,但现在又出现了关闭页面时的崩溃问题。。
1、window页里我加入了api.setFrameClient,监听frame加载完成后触发frame的fnReloadFrame(),这个函数会加载一个上拉加载更多的插件,这个插件初始化后会自动读取数据,添加页面,我测试了,必须用这个插件,如果直接在fnReloadFrame()读取数据添加页面也会崩溃,这个插件等于是把页面刷新时间滞后了,目前可以保证50次打开,没有崩溃。

但是遇到了新的问题
1、点击window顶部的菜单回退按钮时,会执行api.closeWin(),但是会随机崩溃,反复点击回退按钮测试时发现,有时点1次就崩溃,有时是18次,有时是27次,崩溃现象为window部分全黑然后退出,但frame不黑,还是刷新后的页面。
2、如果使用安卓的keyback,可以安全退出页面,50次退出0次崩溃,就是不知道为什么使用api.closeWin()会崩溃,但keyback不会崩溃。



3个页面:列表页、详情window页、详情frame页

列表页:
api.openWin({
    name: Details.Window,
    url: 'widget://html/details/details_win.html',
    pageParam: { id: id },
    delay: 300
});




详情window页目前就是fnCloseWindow()时,window部分会崩

<body>
    <section class="status-bar" id="uiStatusBarDom"></section>
    <section class="aui-bar aui-bar-nav" id="uiHeaderDom">
        <a class="aui-btn aui-pull-left" tapmode>
            <span class="aui-iconfont aui-icon-left"></span>
        </a>
        <div class="aui-title">餐厅详情(审核中)</div>
    </section>

</body>


function fnInitWindow(pageParam) {

    var uiStatusBarDom = $api.byId('uiStatusBarDom'),
        uiHeaderDom = $api.byId('uiHeaderDom'),
        uiFooterDom = $api.byId('uiFooterDom');

    $api.fixStatusBar(uiStatusBarDom);
    api.setStatusBarStyle({style: 'light'});

    var uiStatusBarPos = $api.offset(uiStatusBarDom),
        uiHeaderPos = $api.offset(uiHeaderDom),
        uiHeaderPosH = uiStatusBarPos.h + uiHeaderPos.h,
        uiFooterPos = $api.offset(uiFooterDom),
        uiContentHeight = api.winHeight - uiHeaderPosH;

    api.openFrame({
        name: Details.Frame,
        url: './details_frm.html',
        pageParam: {
            id: uiDataParam.id
        },
        bounces: false,
        scrollToTop: false,
        vScrollBarEnabled: false,
        hScrollBarEnabled: false,
        rect: {
            x: 0,
            y: 0 + uiHeaderPosH,
            w: 'auto',
            h: uiContentHeight
        }
    });
};

function fnInitEvent() {
   
    api.setFrameClient({
        frameName: Details.Frame
    }, function(ret, err){

        if (ret.state == 2) {
            api.execScript({
                name: api.winName,
                frameName: Details.Frame,
                script: 'fnReloadFrame();'
            });
        }
    });
};

function fnCloseWindow() {

    setTimeout(function() {
        api.closeWin();
    }, 100);
};






详情frame页:目前apiready里没有任何操作,等待window调用fnReloadFrame()

function fnReloadFrame() {

    //  这是一个上拉加载更多插件,能把具体的读数据操作滞后,如果不加这个插件,直接读数据并刷新页面,也会崩溃
    uiDropload = $('.loading-wrap').dropload({
        scrollArea: window,
        domDown: {
            domClass: 'dropload-down',
            domRefresh: '<div class="dropload-refresh">上拉获取更多</div>',
            domLoad: '<div class="aui-info dropload-load"><span class="loading"></span><span class="aui-margin-l-5">正在加载...</span></div>',
            domNoData: '<div class="dropload-noData">加载失败</div>'
        },
        autoLoad: true,
        loadDownFn: function(me) {

            //   这是上拉加载更多插件的停止刷新函数
            function _fnDroploadDone() {
                me.lock();
                me.noData();
                me.resetload();
            };

            //  我封装的数据层、接口层、逻辑层打包函数,传入id把所有数据都读出来,读出来的数据可以直接使用dot模板生成页面。函数里没有界面操作。
            fnGetFrameData({
                id: uiDataParam.id,
                onSuccess: function(data) {


                    //  当数据读取成功后执行onSuccess(data)

                   //   先停止插件刷新,然后隐藏插件界面元素
                    _fnDroploadDone();
                    var uiLoadingWrapDom = $api.byId('uiLoadingWrapDom');
                    if (!$api.hasCls(uiLoadingWrapDom, 'aui-hide'))
                        $api.addCls(uiLoadingWrapDom, 'aui-hide');

                  //   获取页面上的容器,使用dot生成页面
                    var uiContentWrapDom = $api.byId('uiContentWrapDom');
                    var uiContentTmpDot = doT.template($api.byId('uiContentTmp').innerHTML);
                    uiContentWrapDom.innerHTML = uiContentTmpDot(data);

                },
                onFailure: function(ret, err) {

                   //  如果失败了,停止插件操作,toast一个消息
                    _fnDroploadDone();
                    fnToast(err.msg || ret.message, 5000);
                }
            });
        }
    });
};





16
帖子
0
勋章
38
Y币
主函数 发表于 2017-4-2 23:29
怎么个动态刷新Body的功能?发出来我看看呢。。

传了个崩溃视频
bug.zip 下载附件
2017-4-3 06:17上传13.04 MB下载次数: 123
21
帖子
4
勋章
1万+
Y币
Erondra 发表于 2017-4-3 04:17
打开页面时的崩溃问题解决了,但现在又出现了关闭页面时的崩溃问题。。
1、window页里我加入了api.setFram ...

视频看了,看样子好像是初始化的时候和上次关系的时候感觉像是延迟造成了数据出问题,然后崩溃的感觉。。。
等官方放完假帮你发给官方看看吧,今天加班,赶东西,没时间详细来帮你看哈。
16
帖子
0
勋章
38
Y币
主函数 发表于 2017-4-3 11:57
视频看了,看样子好像是初始化的时候和上次关系的时候感觉像是延迟造成了数据出问题,然后崩溃的感觉。。 ...

好吧,谢谢
12
您需要登录后才可以回帖 登录

本版积分规则