您的位置:首页 > 移动开发 > Android开发

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。 该权限拒绝堆栈跟踪
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");
}
}


这段代码应该使错误消失。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息