当前位置: 首页 > news >正文

北京专业网站制作服务百度地图网页版入口

北京专业网站制作服务,百度地图网页版入口,怎么做网站的效果图,怎样制作网页超链接1、前言 ANR对于Android开发者来说一定不会陌生#xff0c;从刚开始学习Android时的一不注意就ANR#xff0c;到后来知道主线程不能进行耗时操作注意到这点后#xff0c;程序出现ANR的情况就大大减少了#xff0c;甚至于消失了。那么真的是只要在主线程做耗时操作就会产生…1、前言 ANR对于Android开发者来说一定不会陌生从刚开始学习Android时的一不注意就ANR到后来知道主线程不能进行耗时操作注意到这点后程序出现ANR的情况就大大减少了甚至于消失了。那么真的是只要在主线程做耗时操作就会产生ANR吗为什么在有时候明明觉得自己没在主线程做耗时操作也出现了ANR呢一旦出现莫名其妙的ANR怎么定位导致ANR的产生的位置和解决问题呢那么接下来就来一个个的解决这些问题。 2、ANR是什么 ANR全称Application Not Responding即应用程序无响应。在Android中如果应用程序有一段时间无法响应用户操作系统会弹出弹窗让用户选择是继续等待还是强制关闭程序。一款良好应用APP是不应该出现这个弹窗的。 3、ANR的产生原因 ANR产生原因和类型有以下几种 1、Activity在5秒钟之内无法响应屏幕触摸事件挥着键盘输入事件就会产生ANR。 KeyDispatchTimeout ReasonInput event dispatching timed out 2、BroadcastReceiver在10秒钟之内还未执行完成就会产生ANR。 BroadcastTimeout ReasonTimeout of broadcast BroadcastRecord 3、Service各个生命周期在20秒钟之内没有执行完成就会产生ANR。 ServiceTimeout ReasonTimeout executing service 4、ContentProvider在10秒钟之内没有执行完成就会产生ANR。 ContentProviderTimeout Reasontimeout publishing content providers 在以上这几种原因中出现最多的一般是第一种而且往往都是因为在写代码时不注意在主线程做了耗时的操作。 4、ANR的定位与解决 关于ANR的定位这里举一个例子来看。这是我之前遇到的一次出现ANR的时候所解决问题的情况和解决步骤。 首先当然是复现ANR现象找准ANR出现的地方查看对应代码如果能直接看出来问题所在找到代码中做的错误操作那么直接修改相应代码就解决问题了。但是如果没法轻易看出问题原因接下来就只好去Logcat中查看对应的错误日志。 07-22 21:39:17.019 819-851/? E/ActivityManager: ANR in com.xxxx.performance (com.xxxx.performance/.view.home.activity.MainActivity)PID: 7398Reason: Input dispatching timed out (com.xxxx.performance/com.xxxx.performance.view.home.activity.MainActivity, Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago. Wait queue length: 29. Wait queue head age: 8579.3ms.)Load: 18.22 / 18.1 / 18.18CPU usage from 0ms to 8653ms later:124% 7398/com.xxxx.performance: 118% user 6.5% kernel / faults: 4962 minor 7 major82% 819/system_server: 28% user 53% kernel / faults: 10555 minor 11 major23% 4402/adbd: 1% user 22% kernel10% 996/com.android.systemui: 4.6% user 6.2% kernel / faults: 4677 minor 1 major4.6% 2215/com.android.phone: 1.5% user 3.1% kernel / faults: 5411 minor6.3% 6268/perfd: 3.4% user 2.8% kernel / faults: 134 minor0.5% 1149/com.miui.whetstone: 0.1% user 0.3% kernel / faults: 3016 minor 1 major0.2% 2097/com.xiaomi.finddevice: 0.1% user 0.1% kernel / faults: 2256 minor0.6% 2143/com.miui.daemon: 0.2% user 0.3% kernel / faults: 2798 minor1.2% 1076/com.xiaomi.xmsf: 0.6% user 0.6% kernel / faults: 2802 minor0% 2122/com.android.server.telecom: 0% user 0% kernel / faults: 2929 minor0% 2244/com.miui.contentcatcher: 0% user 0% kernel / faults: 1800 minor0% 2267/com.mediatek.nlpservice: 0% user 0% kernel / faults: 2052 minor0% 2166/com.xiaomi.mitunes: 0% user 0% kernel / faults: 1797 minor 3 major0% 2190/com.fingerprints.service: 0% user 0% kernel / faults: 1857 minor0.1% 154/mmcqd/0: 0% user 0.1% kernel0.4% 8069/logcat: 0.3% user 0.1% kernel......从日志第一行开始看可以看到发生错误的应用包名和类名这里是ANR in com.xxxx.performance (com.xxxx.performance/.view.home.activity.MainActivity)。接着看到进程号PID为7398。发生ANR的Reason是Input dispatching timed out就是上面提到的第一种。再往下就是活跃进程的CPU占用率日志。 124% 7398/com.xxxx.performance82% 819/system_server10% 996/com.android.systemui4.6% 2215/com.android.phone......光看Logcat中的日志只能看到这些信息大概知道是在MainActivity出现了问题但还是不能清楚的定位到发生ANR的代码行想要获得进一步的错误信息只能通过查看ANR过程中生成的堆栈信息文件traces.txt了。 traces.txt文件位置在/data/anr/目录下可以通过以下adb命令将其拷贝到sd卡目录下获取查看。 adb shell cat /data/anr/traces.txt /mnt/sdcard/traces.txt exittraces.txt里的信息 DALVIK THREADS (42): main prio5 tid1 Native| groupmain sCount1 dsCount0 obj0x75ceafb8 self0x55933ae7e0| sysTid7398 nice0 cgrpdefault sched0/0 handle0x7f7ddae0f0| stateS schedstat( 101485399944 3411372871 31344 ) utm9936 stm212 core1 HZ100| stack0x7fc8d40000-0x7fc8d42000 stackSize8MB| held mutexeskernel: __switch_to0x74/0x8ckernel: futex_wait_queue_me0xcc/0x158kernel: futex_wait0x120/0x20ckernel: do_futex0x184/0xa48kernel: SyS_futex0x88/0x19ckernel: cpu_switch_to0x48/0x4cnative: #00 pc 00017750 /system/lib64/libc.so (syscall28)native: #01 pc 000d1584 /system/lib64/libart.so (_ZN3art17ConditionVariable4WaitEPNS_6ThreadE140)native: #02 pc 00388098 /system/lib64/libart.so (_ZN3artL12GoToRunnableEPNS_6ThreadE1068)native: #03 pc 000a5db8 /system/lib64/libart.so (_ZN3art12JniMethodEndEjPNS_6ThreadE24)native: #04 pc 000280e4 /data/dalvik-cache/arm64/systemframeworkboot.oat (Java_android_graphics_Paint_native_1init__156)at android.graphics.Paint.native_init(Native method)at android.graphics.Paint.init(Paint.java:435)at android.graphics.Paint.init(Paint.java:425)at android.text.TextPaint.init(TextPaint.java:49)at android.text.Layout.init(Layout.java:160)at android.text.StaticLayout.init(StaticLayout.java:111)at android.text.StaticLayout.init(StaticLayout.java:87)at android.text.StaticLayout.init(StaticLayout.java:66)at android.widget.TextView.makeSingleLayout(TextView.java:6543)at android.widget.TextView.makeNewLayout(TextView.java:6383)at android.widget.TextView.checkForRelayout(TextView.java:7096)at android.widget.TextView.setText(TextView.java:4082)at android.widget.TextView.setText(TextView.java:3940)at android.widget.TextView.setText(TextView.java:3915)at com.xxxx.performance.view.home.fragment.AttendanceCheckInFragment.onNowTimeSuccess(AttendanceCheckInFragment.java:887)at com.xxxx.performance.presenter.attendance.AttendanceFragmentPresenter$6.onNext(AttendanceFragmentPresenter.java:214)at com.xxxx.performance.presenter.attendance.AttendanceFragmentPresenter$6.onNext(AttendanceFragmentPresenter.java:205)at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:198)at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:250)at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)............还是从头开始看来看每个字段对应的含义 线程名main 线程优先级prio5 线程锁ID tid1 线程状态Native 线程组名称groupmain 线程被挂起的次数sCount1 线程被调试器挂起的次数dsCount0 线程的java的对象地址obj0x75ceafb8 线程本身的Native对象地址self0x55933ae7e0 线程调度信息 Linux系统中内核线程ID: sysTid7398与主线程的进程号相同 线程调度优先级nice0 线程调度组cgrpdefault 线程调度策略和优先级sched0/0 线程处理函数地址handle0x7f7ddae0f0 线程的上下文信息 线程调度状态stateS 线程在CPU中的执行时间、线程等待时间、线程执行的时间片长度schedstat(101485399944 3411372871 31344 ) 线程在用户态中的调度时间值utm9936 线程在内核态中的调度时间值stm212 最后执行这个线程的CPU核序号core1 线程的堆栈信息 堆栈地址和大小stack0x7fc8d40000-0x7fc8d42000 stackSize8MB 最后看到堆栈信息里的这一行 at com.xxxx.performance.view.home.fragment.AttendanceCheckInFragment.onNowTimeSuccess(AttendanceCheckInFragment.java:887)这里就看清楚了是在AttendanceCheckInFragment中的887行出现的问题再到对应代码行中就很容易发现ANR的原因了。 5、ANR的相关问题 在Activity的onCreate方法里调用sleep方法会发生ANR吗 以前一直认为在主线程做了耗时操作就会发生ANR那么真的是这样吗在Activity的onCreate方法里调用Thread.sleep(60 * 1000)让主线程sleep60秒会导致应用程序ANR吗写个Demo测试一下。 public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {Log.d(ANR,开始sleep);Thread.sleep(60*1000);Log.d(ANR,sleep完成);} catch (InterruptedException e) {e.printStackTrace();}} }如上代码运行程序结果应用没有发生ANR,在sleep了60秒后正常打印日志。 再次运行程序这回在程序运行后按下返回键查看现象 这次果然就ANR了。通过这个例子显而易见的得到了这个问题的正确答案。在Activity的onCreate方法里调用sleep方法或者说做耗时操作不一定会产生ANR。其实从ANR本身意为应用程序没有响应同时根据上面总结的ANR原因就可以看出耗时操作本身是不会产生ANR的导致ANR的根本还是应用程序无法在一定时间内响应用户的操作。所以因为主线程被耗时操作占用了主线成程无法对下一个操作进行响应才会ANR没有需要响应的操作自然就不会产生ANR或者应该这样说:主线程做耗时操作非常容易引发ANR。 6、总结 光在主线程做耗时操作不会产生ANR超时响应用户操作才会产生ANR。ANR的定位方法主要是根据Logcat中日志和ANR过程中生成的堆栈信息文件traces.txt。解决问题不如预防问题写代码的时候要注意预防产生ANR。预防ANR的产生不光是在Activity中注意要把耗时操作放到子线程中去还要注意在使用其他三个组件时在其生命周期中同样不能做太耗时的操作。另外在使用多线程时候要注意同步和死锁的情况一旦产生死锁主线程同样会引发ANR。 作者胖宅老鼠 链接https://juejin.cn/post/6844904069731975176 来源稀土掘金 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
http://www.hkea.cn/news/14298282/

相关文章:

  • 云南网站制作推荐虚拟空间应用程序
  • 深圳品牌网站建设公司哪家好如何创建一个个人网站简答题
  • 哈尔滨建站怎么做杭州网站建设icp备
  • 顺德品牌网站建设价格wordpress图书介绍插件
  • 网站建设制作后报告wordpress rtmp
  • 什么是网站跳出率乐清网站制作优化
  • 女人网站源码东莞网络外包公司
  • 建网站学什么专业国内正规seo网络推广
  • 寿光网站建设m0536浙江手机版建站系统哪个好
  • 福清做网站的公司wordpress怎么添加标签页
  • 网站开发需要的技术人员有什么网站小游戏怎么做
  • 怎样搭建一个个人网站wordpress文章图片显示错误
  • 网站开发ios网站制作论文 优帮云
  • 大连门户网站开发wordpress指定分类广告
  • 合肥做网站推广哪家好长沙网站seo哪家公司好
  • 专做负面的网站免费行情软件app网站大全下载免费入口
  • 辽宁建设工程信息网官网新网站是哪个做捕鱼网站电话号码
  • 做外贸网站用哪些小语种福步外贸论坛注册
  • 建设淘宝客网站怎么做网站推广平台
  • 安康那个公司做网站好品牌建设工作纪实
  • 做搜索引擎网站论文 网站建设
  • asp网站采集创新的企业网站开发
  • 谷歌收录网站html5经典网站
  • 网站维护主要从哪几个方面做网站建设开发怎么样
  • 为什么网站搜索不到做问卷的几个网站
  • 电子商务网站建设类型小橡皮私人定制app软件
  • 阳山做网站seo网站怎么优化
  • 网站基本设置企业文化墙素材图片
  • 盐田区住房和建设局网站有内涵的公司名字
  • 嘉兴网站建设网站住房城乡建设部门户网站烟气脱硫