Android Autostart应用程序无法解释的崩溃
主要活动代码为:Android Autostart应用程序无法解释的崩溃,android,android-intent,boot,autostart,android-broadcast,Android,Android Intent,Boot,Autostart,Android Broadcast,主要活动代码为: package com.example.testing; import android.os.Bundle; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.view.Menu; public class MainAct
package com.example.testing;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public class Boot extends BroadcastReceiver{
/*@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_FROM_BACKGROUND);
context.startActivity(i);
}*/
@Override
public void onReceive(Context context, Intent intent) {
// make sure you receive "BOOT_COMPLETED"
if ((intent.getAction() != null) && (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")))
{
// Start the service or activity
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_FROM_BACKGROUND);
i.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
try {
Thread.sleep(120000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.startActivity(i);
}
}
}
}
舱单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testing"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.testing.second"
android:label="second" >
</activity>
<activity
android:name="com.example.testing.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:enabled="true" android:name=".Boot" android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
</manifest>
在Emulator中,应用程序启动(Emulator for 4.0.3 ICS),但在我的ICS 4.0.4 SonyEricsson上,它Crass也用三星Galaxy 2.2 Froyo Android测试了这一点,仍然存在同样的问题,请帮助
我添加了线程睡眠,因为应用程序在手机启动时崩溃,所以我认为这是由于设备上的资源过载造成的,这被认为是无用的
我认为这是LOGCAT的摘录,它定义了这个问题
I/ActivityManager( 274): Start proc com.yahoo.mobile.client.android.mail for broadcast com.yahoo.mobile.client.android.mail/com.yahoo.mobile.client.share.update.SoftwareUpdateSystemBroadcastReceiver: pid=805 uid=10014 gids={3003, 1007, 1015}
D/PhoneStatusBar( 359): disable: < expand icons alerts ticker system_info BACK HOME recent* CLOCK >
D/PhoneStatusBar( 359): disable: < expand icons alerts ticker system_info back* home* recent clock* >
I/ActivityManager( 274): Start proc com.example.testing for broadcast com.example.testing/.Boot: pid=824 uid=10153 gids={}
E/AndroidRuntime( 824): FATAL EXCEPTION: main
E/AndroidRuntime( 824): java.lang.RuntimeException: Unable to instantiate receiver com.example.testing.Boot: java.lang.ClassNotFoundException: com.example.testing.Boot
E/AndroidRuntime( 824): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2111)
E/AndroidRuntime( 824): at android.app.ActivityThread.access$1500(ActivityThread.java:127)
E/AndroidRuntime( 824): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
E/AndroidRuntime( 824): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 824): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 824): at android.app.ActivityThread.main(ActivityThread.java:4441)
E/AndroidRuntime( 824): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 824): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 824): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime( 824): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime( 824): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 824): Caused by: java.lang.ClassNotFoundException: com.example.testing.Boot
E/AndroidRuntime( 824): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
E/AndroidRuntime( 824): at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime( 824): at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime( 824): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2106)
E/AndroidRuntime( 824): ... 10 more
I/BootReceiver( 274): Copying /proc/last_kmsg to DropBox (SYSTEM_LAST_KMSG)
I/ActivityManager(274):启动proc com.yahoo.mobile.client.android.mail for broadcast com.yahoo.mobile.client.android.mail/com.yahoo.mobile.client.share.update.SoftwareUpdateSystemBroadcastReceiver:pid=805 uid=10014 gids={3003,1007,1015}
D/PhoneStatusBar(359):禁用:
D/PhoneStatusBar(359):禁用:
I/ActivityManager(274):启动proc com.example.testing for broadcast com.example.testing/.Boot:pid=824 uid=10153 gids={}
E/AndroidRuntime(824):致命异常:主
E/AndroidRuntime(824):java.lang.RuntimeException:无法实例化receiver com.example.testing.Boot:java.lang.ClassNotFoundException:com.example.testing.Boot
E/AndroidRuntime(824):位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2111)
E/AndroidRuntime(824):位于android.app.ActivityThread.access$1500(ActivityThread.java:127)
E/AndroidRuntime(824):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208)
E/AndroidRuntime(824):位于android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(824):位于android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(824):位于android.app.ActivityThread.main(ActivityThread.java:4441)
E/AndroidRuntime(824):位于java.lang.reflect.Method.Invokenactive(本机方法)
E/AndroidRuntime(824):位于java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(824):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime(824):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime(824):位于dalvik.system.NativeStart.main(本机方法)
E/AndroidRuntime(824):由以下原因引起:java.lang.ClassNotFoundException:com.example.testing.Boot
E/AndroidRuntime(824):位于dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
E/AndroidRuntime(824):位于java.lang.ClassLoader.loadClass(ClassLoader.java:501)
E/AndroidRuntime(824):位于java.lang.ClassLoader.loadClass(ClassLoader.java:461)
E/AndroidRuntime(824):位于android.app.ActivityThread.HandlerReceiver(ActivityThread.java:2106)
E/AndroidRuntime(824):。。。10多
I/BootReceiver(274):将/proc/last\u kmsg复制到DropBox(SYSTEM\u last\u kmsg)
logcat可以解释您的问题<代码>com.example.testing.Boot不存在。。。这是正确的,因为Boot
是MainActivity
的一个内部类,所以它至少应该是com.example.testing.MainActivity.Boot
但是,我认为不允许使用内部类作为接收方,因为系统不知道应该调用哪个“外部类”?因此,请将它放在
com.example.testing
包中自己的文件中。请输入崩溃的stacktrace。Android会在开机时提供Logcat吗?连接到开发PC“它崩溃了”。。。我们该怎么处理你的问题?!你真的需要提供一个堆栈跟踪,或者至少告诉我们哪个部分崩溃了!Android总是提供strack跟踪信息。您甚至可以在应用程序崩溃后使用adb logcat
获取它,而无需连接到您的开发PC。在这种情况下,您可以尝试使用自定义UncaughtExceptionHandler
并将stacktrace保存到文件中。但在此之前,您可能应该尝试将接收器代码移动到其他文件。您不应将其用作活动的非静态内部类。好的,这似乎是解决我问题的最有可能的方法。我不知道您对广播接收器有多少经验,但请查看以了解有关它们的其他详细信息我不知道。。。你的代码真的在模拟器上被调用了吗?有关更多信息,请查看emulator logcat。。?真实设备和仿真器之间有很多区别。因此,当某个东西在模拟器上工作时,它不会(非常)说明它是否在真实设备上工作……是的,这就是为什么我相信在真实设备上进行测试的原因