我有一个Android应用程序,主活动上有一个按钮,可以创建第二个PreferenceActivity来显示设置。
清单看起来像这样
<application android:name=".MyApp"
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".MyApp"
android:label="@string/app_name"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Settings"></activity>
</application>
当我使用Monkey进行测试时出现问题。它将启动我的应用程序,然后按按钮创建我的PreferenceActivity。创建PreferenceActivity后,monkey将发送一个意图来启动另一个包。 PreferenceActivity将暂停,另一个包将运行。然后猴子发送另一个意图启动我的原始应用程序。我看到我的PreferenceActivity进入onResume(),然后冻结并发生ANR。
我在logcat中看到了:
INFO/ActivityManager(211): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.MyApp/.MyApp } from pid 4532
# Main activity is created and runs.
# Monkey presses settings button, which sends intent to start PreferenceActivity.
INFO/ActivityManager(211): Starting: Intent { cmp=com.example.MyApp/.Settings } from pid 4519
# PreferenceActivity is created and runs.
# Monkey sends intent to start other package. PreferenceActivity pauses.
INFO/ActivityManager(211): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.OtherApp/.OtherApp } from pid 4532
# Other app runs.
# Monkey sends intent to start MyApp again.
INFO/ActivityManager(211): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.MyApp/.MyApp } from pid 4532
# PreferenceActivity's onResume() method runs.
# Screen is blank.
ERROR/ActivityManager(211): ANR in com.example.MyApp (com.example.MyApp/.Settings)
我删除了我的PreferencesActivity中的所有内容,所以它剩下的就是
public class Settings extends PreferenceActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
addPreferencesFromResource(R.xml.preferences);
}
}
恢复PreferenceActivity时我仍然得到ANR。但是,如果我将其更改为扩展Activity而不是PreferenceActivity并删除onCreate()中的首选项,我就不再获得ANR了。如果我尝试用“adb shell am”手动启动意图,我也没有得到ANR,所以我的问题只发生在运行Monkey时。
任何帮助都将非常感激。 谢谢。