Fork me on GitHub

UWP 自然灾害App在刷新数据后卡死的解决方案

一直以为都在纳闷,为啥我的其他app崩溃次数几乎为0,而单单这个App的崩溃次数简直逆天了,我都不敢相信。

 

 

 

每天都有至少上千次crash。。。我也是服的

 

不甘心,趁着这次重构的机会,把代码好好捋了1下

Debug.WriteLine("BeginRequest " + DateTime.Now);
            progressRing.Visibility = Visibility.Visible;
            progressRing.IsActive = true;

            var repsonse = await HttpHelper.GetJsonAsync<USGSEarthquakesModel>(strRequestUrl);
            if (repsonse != null && repsonse.metadata.status == 200)
            {
                Debug.WriteLine("EndRequest " + DateTime.Now);
                Debug.WriteLine("BeginxBind " + DateTime.Now);
                Debug.WriteLine("Count " + repsonse.metadata.count);
                ObsList.Clear();
                if (repsonse.metadata.count > 0)
                {
                    foreach (FeaturesItem em in repsonse.features)
                    {
                        if (em.properties.mag == null)
                            continue;

                        try
                        {
                            StandardEarthquakesModel sm = new StandardEarthquakesModel
                            {
                                Time = Helpers.TimeConverter.Convert2MyTime(em.properties.time),
                                Mag = (double)em.properties.mag,
                                Latitude = (double)em.geometry.coordinates[1],
                                Longitude = (double)em.geometry.coordinates[0],
                                Depth = (double)em.geometry.coordinates[2],
                                Location = em.properties.place,
                            };
                            ObsList.Add(sm);
                        }
                        catch { }
                    }

                    PullToRefreshListViewControl.ItemsSource = ObsList;
                    (Application.Current as App).gObsEarthquakeList = ObsList;
                    TipServices.TipUpdateData((int)repsonse.metadata.count);

                    Debug.WriteLine("EndxBind " + DateTime.Now);
                }
                else
                {
                    TipServices.TipNoData();
                }
            }
            else
            {
                TipServices.TipNetError();
            }

            progressRing.Visibility = Visibility.Collapsed;
            progressRing.IsActive = false;

 

看获取json,看绑定,看数据模型,貌似都没啥问题啊。

于是就把代码分块注释掉,看看哪一部分有bug。

首先注释掉response之后代码,可以确定获取response没猫饼。

难道try catch有问题?

排除。。。

接着就是

PullToRefreshListViewControl.ItemsSource = ObsList;

有问题???

其他app也是这么写的啊。。。

 

 

注释一番后,最终确定

TipServices.TipUpdateData((int)repsonse.metadata.count);

真的有问题。

进去看看

public static void TipUpdateData(int nCount)
        {
            if (notifyPopup != null)
                notifyPopup.Hide();
            if (strCurrentLanguage.ToLower().Equals("zh-cn"))
                notifyPopup = new NotifyPopup(LanguageHelper.strTipDataUpdatedAmount_zh_cn + nCount);
            else
                notifyPopup = new NotifyPopup(nCount + LanguageHelper.strTipDataUpdatedAmount_en);
            notifyPopup.Show();

            SoundHelper.PlaySucceedTipSound();
        }

 

这个类似安卓toast,其他app用过无数次,怎么会有bug???

那基本可以确定

SoundHelper.PlaySucceedTipSound();

这句话挂了。

private static public static void PlaySucceedTipSound()
{
  MediaPlayer mediaPlayer = new MediaPlayer();
  mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/Skype.wav")); 
  mediaPlayer.Play();
}

 

把MediaPlayer拿出来设置成静态,🆗

 

最后附上App下载地址:https://www.microsoft.com/store/apps/9N3X2JZP7B96

 

 

 

 

posted @ 2018-01-11 11:37  猫叔Vincent  阅读(606)  评论(0编辑  收藏  举报