小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法

今天开发小程序遇到了一个问题,问题是这样的,业务需求是:
需要在页面加一个时间选择器,于是我用了小程序官网提供的原声picker组件,
贴出代码

前端代码

    <!-- 时间段 -->  
    <view class="picker_group">  
      <picker mode="date" value="{{startTime}}"  bindchange="bindDateChange">  
        <view class="picker">  
          {{startTime}}  
        </view>  
      </picker>  
      至  
      <picker mode="date" value="{{endTime}}" start="{{startTime}}" end="{{endTimeRange}}" bindchange="bindDateChange2">  
        <view class="picker">  
          {{endTime}}  
        </view>  
      </picker>        
    </view>  

js代码

bindDateChange2(e) {
    let clickEndTime = new Date(e.detail.value)

    let t1 = (clickEndTime.getTime())/1000 // 结束时间 毫秒时间戳

    let startTime = new Date(this.data.startTime)
    let t2 = (startTime.getTime())/1000  // 开始时间 毫秒时间戳

    let sevenDayTime = 7*24*60*60  // 7天毫秒数 604800
    let t3 = t2+sevenDayTime // 1549641600
    let t4 = this.timestampToTime(t3)

    if(t1>=t2){
      this.setData({
        endTime: e.detail.value,
        endTimeRange:this.data.endTimeRange
      });
    }
  },

 bindDateChange(e) {
    let time = new Date(e.detail.value)
    let t1 = (time.getTime())/1000 // 毫秒时间戳 2019-02-21 1549036800

    let sevenDayTime = 7*24*60*60  // 7天毫秒数 604800
    let t2 = t1+sevenDayTime // 1549641600
    let t3 = this.timestampToTime(t2)
    // console.log('bindDateChange',t3,e.detail.value,'----')
 
    let time2 = new Date(this.data.endTime)  // 结束时间 年月日
    let t4 = (time2.getTime())/1000  //  结束时间  毫秒

    this.setData({
      endTime : t3,
      endTimeRange:t3,
      startTime: e.detail.value,
    })
  },

后来我去百度了很多资料,网上的很多人都在用微信官方提供的原声组件picker都遇到了和我相同的问题,在安卓机型下,点击结束时间按钮,闪退问题,如果是先点击开始按钮,不会存在闪退,如果直接先点击结束时间,则会存在整个小程序闪退问题,下面的截图是我百度一堆博客后,截取的说到问题点的博客文章截图:

小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法
小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法
小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法
小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法
小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法

  • 于是我去问测试,我昨天写的这块代码,有没有问题,昨天测试在安卓手机上测了N遍,都没有闪退这个问题,所以,我跑到gitlab上去翻昨天提交的代码,看了昨天的代码,和现在的代码,对比之后,我发现了闪退的问题所在之处,原来是,我在开始时间按钮的picker里面,给他加了个end = “” 属性啊,哎,扎心,至于为什么加呢,是因为我的需求, 是因为这块业务需求,需要前端设置只能选择7天,然后我手残,给开始时间加了end属性,来约束选择开始时间,后来想了想,既然选择开始时间,开始时间的话,为什么要给它加终止时间来约束呢,用户选择开始时间,它可以是2018年,也可以是2050年,选择啥时候都可以,为什么要约束开始时间呢,于是我想通了这一点,再结合和昨天提交的代码做比较这两点之后,我发现了导致安卓机型闪退的问题所在,还是很激动的,毕竟,当你看着自己写的代码出现用户点击某个按钮后,小程序直接闪退,到微信聊天页面,还是很难受的,从用户体验的角度,这点,用户是绝对接受不了的,所以我也很蓝瘦,后来经过自己的对比分析代码,百度各大论坛,思否,博客,想通了为什么出现这个问题,最终解决了它,并且用安卓机测试,确实没问题了,心里还是很有成就感的,哈哈哈,来,看下面的截图吧,这里面包括了我解决这个问题的心路历程哇。。。。

小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法
小程序picker插件安卓手机上崩溃闪退问题之史上最有效的解决办法

注意以上两个点,就能完美的解决在安卓机型下 picker 组件,小程序闪退的问题了 更多博客请转移到 作者的个人博客网站

小强的个人博客网站