00:00
嗯,好,那接着这个思路的话呢,我们接着往下写哈,嗯,你这时候呢,其实给用户的体验呢,也没啥好的,你看这个成黑的了哈,而且呢,你也没有说提这个框啊,或者提示个tos之类的,所以我们这时候呢,我我这个就就不这样写了啊,你这呢只是打了一个log哈,我们希望能让用户看一下,那我就写个to。啊,写个透的,你把这个可以加一下啊,CTRLC啊这个我们站到这。啊,这个站这这块这个不行啊,这个呢,你得用个contest嘛啊UI这不我们已经写好了啊,Get contest。行,这个时候呢,我们再跑一下。带着进来。然后到主界面。这个效果还没看出来是吧。
01:00
别的模拟器。看下这个啊。这跟夜神差不多。嗯,找一下头。哎,这是换界面。正常的话呢,就是我们一进来的时候呢,不是报系统的那个框了,呃,而是呢,就进到这个欢迎界面,完了以后再进主界面的时候呢,出现一个,呃,就是应该是出现一个透的是吧,但这时候我们发现其实并没有出现。
02:09
啊,但其实这个时候呢,还是有点问题的哈,这个为什么没有出现这个toas的,嗯,那这个tos呢,我们说过一个什么事呢,就是它一定是在主线程当中执行的,对吧。还记得我们讲前面那个安装器录里边说到说我们加个POS,但是我们写过一个水平进度条,当进度条写,呃,完成的时候呢,我们说他说已经下载完成,但是这个时候呢,这个操作你写在分线程是不对的啊,他得放在主线程当中写。啊,那这个时候呢,我们也说过这个事情,就是你现在这是一个单独的线程吧。啊,单独的这个线程,那肯定不是主线程啊,那你在这里边儿呢,试图执行这个操作是不是也不太合适啊,啊,所以这里边儿我们得动一下啊,那动一下的话呢,我们得把它放在主线程中去做。啊,怎么写。我们可以把它发到主线程里边,使用这个hand的是吧?哎,这是一种方式啊嗯,那我们这呢,还可以再用一种方式啊,这样子来写看一下啊扭一下。
03:10
啊,有一个thread啊,在这里边呢,我们这样做啊,loop.prepare。啊,然后呢。哎,然后呢,Loop点哎,Loop。嗯,这两个方法之间放我们这个操作。这样。保存一下,那这个我就不要了啊,那我这里边我要说什么呢?哎,这两个方法之间的操作就是在主线程中执行的。哎,我们这样写上说,呃,Prepare。它啊和我们这个路。啊之间的这个操作啊,就是。在主线城中。啊,执行的啊,那为什么你能这样去说呢?其实不知道大家还有没有印象啊,就我们在讲这个安卓基础的时候呢,当时我们就在分线程里边写这句话,当时直接就报错了啊,但报错的时候呢,我们看下他这个lock开的信息,当时说说你没有去去调用一下这个prepare,呃,然后我们直接就告诉大家说说的意思就是你没在主线当中执行。
04:21
啊,那当时其实是感觉有点迷糊,哎,怎么报这个东西,它就表示没在主线程中执行呢。啊,其实我们这呢,就这样写了啊,它的意思是这样的哈,说就是在这个安卓系统中。哎,默认情况下。然后呢,呃,一个线程中啊,是不可以。嗯,一个线程是不可以啊,调用我们这个这个loop的一个,呃,进行消息的处理的啊。来进行啊,消息的处理的啊,然后除非啊是主线程。
05:04
那就是我们这里边这个loop哈,你要想直接去调用它进行prepare进行loop这样的一个执行,只有主线能中才可以做,所以当我们去做这样的方法调用的时候呢,那就哎,系统的自自动的就会将我们中间这个操作呢,呃,写在主线程当中。或者就在主线当中去执行。哎,所以说这种方式呢,也是一种啊,实现在主线当中执行的一种方式。啊,前面我们讲过啊,Run on us redad呀,是吧,或者直接用handra呀都可以,这呢也是一种啊。那这个时候我们再来跑一下看,看看能不能把这个框呢给我们报出来啊。哎,是不是出现了啊,那这就相对来讲,它就没有出现了一个未捕获异常,就是我们在这里边这个may当中啊。出现了一个未捕获异常,然后呢,呃,我们给用户的一个提示,只不过这时候我们写的相对比较简单一点啊,就是写了一个toast透视完以后呢,你发现他这就是个黑框了啊。
06:09
那就说明你既然出现异常了,我这个mayit是不是加载也不太正常呀。那你这时候要是按照我们的做法,你接下来应该干点什么呀?要按照系统的套路来讲,是不是下边你应该整个应用应该退出了,哎,所以我们这呢,就可以做这样的事情啊,我们可以怎么着呢?哎,我们在两秒钟以后哈,Thread有个方法叫sleep。这个2000只有一场一场的给他处理一下。啊,这开始啊,呃,停留两秒钟啊,两秒钟以后的话呢,我们做这样的一些操作,首先呢,我们叫啊移除啊当前activity啊,我们就通过这个activity manager,第2Get.remove。嗯,因为我们前面那个welcome已经移除掉了啊,嗯,这是一个它,嗯,接下来的话呢,应该是要结束当前的进程吧。
07:04
啊,一步一步的递进啊,And enjoy.os点。嗯,这个process点我们做一个Q啊,哎,杀掉当前的这个进程啊,当前进程按照一点os.process点啊MYD。啊,当前进程干掉了,那么创建当前进程的这个虚拟机啊,也应该结束结束啊虚拟机。啊,这个汛机呢,我们直接通过C点啊X啊,这里写零表示呢,就是结束虚机。哎,我们接下来这些操作呢,我们也来给他完成,因为整个就没有按照系统的这个默认的方式处理啊,哎,我们就按照自己这种方式来看一下效果。
08:00
哎,欢迎界面,然后紧接着进入主界面,结果出现异常了,哎,接下来我们两秒钟以后呢,让整个这个应用呢全清掉。哎,就是出现这样的情况啊,就没有出现这个黑框了。啊,没有出现它了,行,那这里边呢,我们就解决了第一个问题啊,我们一共说了两个问题啊,回忆一下。解决啊两个问题啊,第一个问题呢,就是当出现啊未补货的异常。啊,异常时啊,说能够给用户啊一个啊相对啊友好的这个提示。哎,我们刚才呢,就没有出错,就写了个post啊,这是第一个啊,第二个呢,就是呃,希望呢,在出现异常时啊,能够呢,呃将。异常信息。哎,发送给后台。
09:01
啊,便于我们在后续的版本中进行更新啊。啊,解决。啊,这些bug啊好,第一个问题呢,我们已经搞定了,那下边来说第二个问题,呃,希望呢,你把这个异常信息呢,得发送到这个后台里面啊,那就相当于得做一个异常信息的一个收集工作了。来看一看啊,那目前这个异常信息就他呗。是吧?那希望呢,是不是把他这个信息得发到我们的后台啊。是这意思吧,嗯,然后呢,你在这里边儿呢,这是整个本地啊,去结束的这样的一个操作,那结束的这个操作呢,这就不要动了,那接下来我们要收集,那我们写个方法啊,就是比如叫啊private boy一个。收集。啊,Collection这个exception啊,这样的一个方法,那这个方法大家想啊。
10:00
这个方法我是在哪个位置掉呀。因为只有他是回调啊。我是写到一上来就写。这块这块还是。这个位置。在这能行吗?这不行,这个你整个进程都干掉了,这个虚拟都没有了是吧,你接着写肯定没有意义了啊。那你好点,是不是应该在他前面啊啊,所以说我就写这就行啊,这个的话呢,它前面后边这都还好是吧?啊,那我就比如写这吧。写法呢,我们就写这个方法啊,调用一下啊,叫收集以上信息。啊,这呢,我们专门写个方法啊,那这异常信息是他了,那你就把它给传进来啊。啊传进来呢,我这儿呢,就呃CTRLCL一下,我这也加上这两个参数啊,这样行,那在这里边的话呢,我们就呃把这个异常信息,比如我首先先盖了一个message啊,先看看你这个是什么信息。
11:04
然后发送给后台,那发送给后台的话。那你这是不是又得联网啊?那你联网的话呢,一定得在分线程执行了,所以我们这就模拟一下啊,我这直接呢,就造一个分线程啊,在这里边呢,我就模拟一下就发送了啊。或者我们在这就写啊,就需要呢,呃,发送。给啊后台。啊,或者或者这样说吧,需要按照。呃,指定的这个URL。嗯,然后呢,访问后台的这个这个so啊。嗯,将。异常信息啊,发送过去啊,这个具体逻辑我们就不在这儿写了,我这个后台我们没有写这个操作啊,这个其实写也比较简单,后台操个表,把这个发过去,那边一接收写到表里就可以了啊,诶这个我就没有做。
12:09
啊,这个做法类似于我们注册的功能啊呃,那这个信息的话呢,我就在我们本地呢,就简单的打印一下得了。啊,就想我们看一下这样的一个exception啊。Ex message行,这样就能看了,那再者呢说就是呃,我这呢,网上看到他报了个什么异常,那我们在这个问题中,那就是报了一个控制人。啊爆了控制人,那真实当中有可能他不是控制人了啊,可能是各种各样的异常,那出现这个异常以后呢,我们后来就一排结果就发现,诶,我这个没出现这个异常啊,那有可能就是跟用户具体的这个手机相关了。或者说跟他这个具体的这个操作系统相关吧,比如说呢,四点几好使,就6.0就不好使了。那这时候我们最好呢,是不是还得希望收集一下用户的这个他本身的这个机子的这个信息啊。
13:03
啊,收集。呃,具体的这个客户的这个,呃,手机包括这个系统的这个信息啊,那这个信息的话呢,那我们就得看看是调哪些方法了。在这里边呢,我们又提到了一个类啊,叫build类。Build类,这个我们可以百度查一下。这个这个你装这个什么吧,这个就特别恶心啊。双12了。就是电商什么节都过是吧,然后逼着我们什么节都过啊。嗯,我这写一个叫。有的。嗯,第一个吧,看看。哎,这个就靠谱。啊,这个类,这个类是干什么的,你看这里边写的啊,关于你当前这个系统的一些信息,其实啊系统的一些属性啊,这里边就写的挺多,你看下边这个有中文这个注释哈,嗯,比如说我们通过这个build.device啊,这我们就可以获取系统这个设备参数。
14:15
呃,系统的版本,然后呢,手机制造商,就是你的手机是什么牌子的啊嗯,这样的一些信息,其实这些呢,就是我们感兴趣的啊,包括这个版本号是多少。啊,就都有了,哎,那我们就直接可以调用这些信息,OK回来。那下边呢,我们就来调一下哈,嗯,我们也写成是一个词论吧。具体这个设备的信息啊,呃,通过这个叫build点,呃,Device,这是一个,嗯,加上一个冒号吧。加上。点还有一个叫什么,呃,Model model。并点这个product。
15:01
就是你对哪些信息感兴趣的,你就可以加哪些啊再看一下。再加这个version.idk啊。嗯,第二还啊,这个版本号是多少行,这个信息的话呢,我就熟悉到了,然后这个message呢,我们在这里边呢,也进行一个log。来保存一下这样啊,加个翻动。OK啊行,那这时候呢,我们再来运行。呃,用户呢,一打开哎换验界面,然后开始进入主界面就哎,出现异常了,哎说提示出现异常了,那这时候呢,我们就诶不自觉的就把这个信息发送到后台了。哎,这呢,就是是不是看啊。这个except说在这里边出现了一个控制针异常。
16:00
啊,首先你知道是个什么异常了,然后其次呢,它这个设备信息。啊,这是什么机子啊?这个这个还看不太出来了,因为我是用的模拟器是吧,哎,我们跑到这个机上看一下。原装。然后就挂掉了。啊,这里边儿。嗯,这是这是我这个机子的型号啊。有八倍,那就这个。这其实它那个荣耀V8哈,这里这不就它一个型号吗。我这是236.0的啊,然后这还是个控制帧啊,这就爆出来了啊,相当于我们就知道啊,后台就能收集到用户的这些信息,接下来你可以根据这些信息呢,你去看看是他这个呃,手机的问题啊,还是他这个版本的问题啊,你再做一些适配优化啊就行。
17:07
好,那就这样整就行啊,这呢,我们后边再出现异常,我们就别让它自动这样处理了,这样处理回头我们不好看了啊。我这儿呢,就在这里边呢,把这个先注释一下啊。给注释掉了啊,就真正你开发的时候上线了,你把这个加上,嗯,这个现在我们测试的时候呢,最好还是希望他在这给报出来啊。嗯,就是还是用它默认的放出来以后我们就好调了。回头呢,真正上线以后呢,就打开让他发给后台啊。行,这个说的比较多,就是我们这个crash handler的一个使用。
我来说两句