Android 系列 3.7应用程序崩溃故障排除
2017-01-09 09:43
316 查看
3.7应用程序崩溃故障排除
问题
您的应用程式崩溃,您不确定原因(请参阅图3-21)。
解
首先查看日志。
图3-21。 什么是应用程序崩溃的样子
讨论
我们可以使用adb logcat命令或Eclipse LogCat窗口来查看我们的AVD日志。 示例3-6显示了如何通过使用adb logcat查看堆栈跟踪来查找故障位置。
实例3-6。 该权限拒绝堆栈跟踪
在示例3-6中,我们有一个权限问题。 因此,此特定实例中的解决方案是将WRITE_SETTINGS权限添加到我们的AndroidManifest.xml文件。
另一个相当常见的错误是空指针异常(NPE)。 例3-7显示了获取NPE时可能会看到的LogCat输出。
具有错误的示例代码如下所示:
上面的代码失败了,因为我们忘了调用findViewById()来为“Text”实例赋值“foo”引用。 这里是修复的示例代码:
这段代码应该使错误消失。
问题
您的应用程式崩溃,您不确定原因(请参阅图3-21)。
解
首先查看日志。
图3-21。 什么是应用程序崩溃的样子
讨论
我们可以使用adb logcat命令或Eclipse LogCat窗口来查看我们的AVD日志。 示例3-6显示了如何通过使用adb logcat查看堆栈跟踪来查找故障位置。
实例3-6。 该权限拒绝堆栈跟踪
E/DatabaseUtils( 53): Writing exception to parcel E/DatabaseUtils( 53): java.lang.SecurityException: Permission Denial: writing com.android.providers.settings.SettingsProvider uri content://settings/system from pid=430, uid=10030 requires android.permission.WRITE_SETTINGS E/DatabaseUtils( 53): at android.content.ContentProvider$Transport. enforceWritePermission(ContentProvider.java:294) E/DatabaseUtils( 53): at android.content.ContentProvider$Transport. insert(ContentProvider.java:149) E/DatabaseUtils( 53): at android.content.ContentProviderNative. onTransact(ContentProviderNative.java:140) E/DatabaseUtils( 53): at android.os.Binder.execTransact(Binder.java:287) E/DatabaseUtils( 53): at com.android.server.SystemServer.init1(Native Method) E/DatabaseUtils( 53): at com.android.server.SystemServer.main(SystemServer.java:497) E/DatabaseUtils( 53): at java.lang.reflect.Method.invokeNative(Native Method) E/DatabaseUtils( 53): at java.lang.reflect.Method.invoke(Method.java:521) E/DatabaseUtils( 53): at com.android.internal.os. ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/DatabaseUtils( 53): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/DatabaseUtils( 53): at dalvik.system.NativeStart.main(Native Method) D/AndroidRuntime( 430): Shutting down VM W/dalvikvm( 430): threadid=3: thread exiting with uncaught exception (group=0x4001b188) ...
在示例3-6中,我们有一个权限问题。 因此,此特定实例中的解决方案是将WRITE_SETTINGS权限添加到我们的AndroidManifest.xml文件。
<manifest ... > <application ... /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> </manifest>
另一个相当常见的错误是空指针异常(NPE)。 例3-7显示了获取NPE时可能会看到的LogCat输出。
I/ActivityManager( 53): Displayed activity com.android.launcher/.Launcher: 28640 ms (total 28640 ms) I/ActivityManager( 53): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.aschyiel.disp/.Disp } I/ActivityManager( 53): Start proc com.aschyiel.disp for activity com.aschyiel.disp/.Disp: pid=214 uid=10030 gids={1015} I/ARMAssembler( 53): generated scanline__00000177:03515104_00000001_00000000 [ 73 ipp] (95 ins) at [0x47c588:0x47c704] in 2087627 ns I/ARMAssembler( 53): generated scanline__00000077:03545404_00000004_00000000 [ 47 ipp] (67 ins) at [0x47c708:0x47c814] in 1834173 ns I/ARMAssembler( 53): generated scanline__00000077:03010104_00000004_00000000 [ 22 ipp] (41 ins) at [0x47c818:0x47c8bc] in 653016 ns D/AndroidRuntime( 214): Shutting down VM W/dalvikvm( 214): threadid=3: thread exiting with uncaught exception (group=0x4001b188) E/AndroidRuntime( 214): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime( 214): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.aschyiel.disp/com.aschyiel.disp.Disp}:java.lang.NullPointerException E/AndroidRuntime( 214): at android.app.ActivityThread.performLaunchActivity( ActivityThread.java:2496) E/AndroidRuntime( 214): at android.app.ActivityThread.handleLaunchActivity( ActivityThread.java:2512) E/AndroidRuntime( 214): at android.app.ActivityThread.access$2200( ActivityThread.java:119) E/AndroidRuntime( 214): at android.app.ActivityThread$H.handleMessage( ActivityThread.java:1863) E/AndroidRuntime( 214): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 214): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime( 214): at android.app.ActivityThread.main(ActivityThread.java:4363) E/AndroidRuntime( 214): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 214): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime( 214): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run( ZygoteInit.java:860) E/AndroidRuntime( 214): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime( 214): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime( 214): Caused by: java.lang.NullPointerException E/AndroidRuntime( 214): at com.aschyiel.disp.Disp.onCreate(Disp.java:66) E/AndroidRuntime( 214): at android.app.Instrumentation.callActivityOnCreate( Instrumentation.java:1047) E/AndroidRuntime( 214): at android.app.ActivityThread.performLaunchActivity( ActivityThread.java:2459) E/AndroidRuntime( 214): ... 11 more
具有错误的示例代码如下所示:
public class Disp extends Activity { private TextView foo; @Override public void onCreate( Bundle savedInstanceState ) { ... foo.setText("bar"); } }
上面的代码失败了,因为我们忘了调用findViewById()来为“Text”实例赋值“foo”引用。 这里是修复的示例代码:
public class Disp extends Activity { private TextView foo; @Override public void onCreate( Bundle savedInstanceState ) { ... foo = (TextView) findViewById(R.id.id_foo); foo.setText("bar"); } }
这段代码应该使错误消失。
相关文章推荐
- 排除路由器崩溃故障
- 排除路由器崩溃故障
- ECLIPSE android 布局页面文件出错故障排除
- android 应用程序异常崩溃捕捉
- Android(安卓)系列手机怎么通过电脑安装手机应用程序?
- 排除路由崩溃故障
- Atitit.故障排除系列-----apache 不能启动的排除
- DNS扫盲系列之六:擅用日志排除BIND故障
- 图片处理系列一Android照片墙应用实现(绝对不崩溃)
- ECLIPSE android 布局页面文件出错故障排除Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
- 排除路由器崩溃故障
- 排除路由器RSP崩溃故障
- Cisco 3800系列路由器硬件故障排除
- MDT2012部署系列之04 MDT Windows部署问题故障排除
- IBM__P系列 小型机 故障定位 故障排除
- cisco2600系列路由器故障排除
- Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据
- Android深入浅出系列课程---Lesson8 Android应用程序启动
- ECLIPSE android 布局页面文件出错故障排除
- Android中导致小米系列手机直接崩溃的主要原因。