美文网首页微信小程序
6-14 应用程序生命周期

6-14 应用程序生命周期

作者: 留白_汉服vs插画 | 来源:发表于2017-11-23 15:41 被阅读8次

    bug2

    执行以下步骤:1、在页面1里面打开音乐播放,2、然后返回新闻列表,3、接着去页面1 。这个时候歌是正常播放的,但是页面2的音乐播放按钮却是暂停状态。

    首先分析出现问题的原因:页面会状态初始化。就是在上面步骤2时候,新闻详情页面关闭了,然后执行步骤3,页面开始重新onLoad,重新初始化。所有的状态变量为初始默认值。而页面音乐播放状态按钮初始值是暂停的。

    这时候思考一下,(老师的data中isMusicPlaying:false,去掉这句也没有用。我的data中没有显型设置)这个保存音乐播放情况的状态变量,应该放在哪里保存?首先想到缓存。我们把音乐播放状isMusicPlaying放在缓存中,当页面重新加载的时候,读取这个状态。这是没问题的。但是会有新的问题:比如我们启动音乐播放,在缓存中写入了值,然后关闭程序。下次进入再进入小程序,这时候读取缓存中播放状态的值,发现是“正在播放”,于是还没有点击“播放”,音乐就诡异地自动响起。

    因此我们需要的是:当本详情页面关闭,音乐播放状态保存,当程序关闭,音乐播放状态清除。这就需要一个全局变量。当本页面关闭进入新闻列表时候,全局变量还在,保留着音乐播放状态。再进入别的详情页面,音乐播放按钮对应音乐播放状态,但是小程序关闭后,重新打开,全局变量重新初始化,成为默认值。这个全局变量就是放在app.js文件中,也就是整个app都能访问的变量。good,就是它了。类似每个页面都有一个函数Page({ }) ,app也有一个App({}) 。在里面设置一个全局变量globalData,其中有一个属性:g_isMusciPlaying:false,默认是没有打开的。 因为这是一个全局,所以任意页面可以获取。可以再post-detail.js 中获取,获取的方式是通过var app = getApp()。下面是相关教程:

    那么在点击音乐开始按钮之后,设置app.globalData.g_isMusicPlaying =true;

    ps:老师的方法是在事件监听函数中改变的。就是onLoad中,那个监听总控开关是播放还是关闭状态的那个地方。

    然后在onLoad函数中,设置本地的音乐播放状态跟全局播放状态app.globalData.g_isMusicPlaying一致就可以了。

    control+p打断点。

    下面说一下APP三个生命周期函数。app的生命周期函数比page简单多:

    前后台切换的时候会触发onHide,关闭再启动才会onLaunch。如果是关闭详情页面,然后打开,只会触发onShow,并不会触发onlaunch。这个只是程序启动时候,触发一次。

    相关文章

      网友评论

        本文标题:6-14 应用程序生命周期

        本文链接:https://www.haomeiwen.com/subject/ybyzvxtx.html