好像我的Android应用程序启动了错误的活动。
AndroidManifest.xml的重要部分:
“MainActivity”应该是在应用启动时启动的活动:
<activity android:name=".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>
<activity
android:name="AnotherActivity"
android:label="@string/app_name">
</activity>
MainActivity:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//display into log that THIS activity is started
Log.d("tag", "MainActivity");
//start async task to install the database on first startup
progressDialog = ProgressDialog.show([params...]);
new InstallDatabaseTask().execute(this);
}
/**
* 1. Installs and initializes the database.
* 2. Opens another activity.
*/
private class InstallDatabaseTask extends AsyncTask {
@Override
protected Object doInBackground(Object... params) {
progressDialog.show();
//open database so it can be installed
MyOpenHelper helper = new MyOpenHelper((Context) params[0]);
helper.getWritableDatabase().close();
//dismiss progress dialog
MainActivity.this.progressDialog.dismiss();
//start another activity
Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
((Context)params[0]).startActivity(intent);
return null;
}
}
AnotherActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//just make sure this activity was started
Log.d("tag", "another activity started");
}
但是日志只显示“另一个活动开始”。
答案 0 :(得分:2)
从你的代码我知道android正在启动正确的活动。
但是在你的oncreate方法中,你正在调用异步任务,所以一旦主要活动创建它就会启动异步任务,并且在异步任务中你调用下面的行
//start another activity
Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
((Context)params[0]).startActivity(intent);
一旦异步任务执行其任务,它就会启动另一个活动。所以你假设android正在启动错误的活动。但是在内部,您正在启动活动,并且您的异步仅在几微秒内完成,因此您假设启动了错误的活动..
答案 1 :(得分:1)
您无法从不是UI线程的线程中从doInBackground()
方法(以及其他UI小部件)访问进度对话框。你应该把它放在onPostExecute()
上。
类似的东西:
private class InstallDatabaseTask extends AsyncTask <Void, Void, Void>{
@Override
protected Object doInBackground(Object... params) {
progressDialog.show();
//open database so it can be installed
MyOpenHelper helper = new MyOpenHelper((Context) params[0]);
helper.getWritableDatabase().close();
return null;
}
@Override
protected void onPostExecute(Void result){
//dismiss progress dialog
MainActivity.this.progressDialog.dismiss();
//start another activity
Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
((Context)params[0]).startActivity(intent);
}
}
我认为你需要在扩展AsyncTask时声明参数。
我不确定这是否可以解决您的问题,但这是一个提示......
答案 2 :(得分:0)
有一件事,你在Manifest文件中声明的AnotherActivity出了问题,不是吗?
<activity
android:name="AnotherActivity"
android:label="@string/app_name">
</activity>
我认为它应该有一个点。喜欢
机器人:名称= “AnotherActivity”
答案 3 :(得分:-1)
在清单中,确保将启动的活动而不是主活动设置为默认值。
类别android:name =“android.intent.category.DEFAULT”
<intent-filter>
<action android:name="com.game.test.DIRECTOR" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
所以它不会作为主要发布。还要检查清单中的意图过滤器,看它们是否正确或存在。