0

似乎我的 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>

主要活动:

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;
        }
}

另一个活动:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //just make sure this activity was started
        Log.d("tag", "another activity started");   
    }

但日志只显示“另一个活动开始”。

4

4 回答 4

2

从您的代码中,我了解到 android 正在启动正确的活动。

但是在您的 oncreate 方法中,您正在调用异步任务,因此一旦主要活动创建它就会启动异步任务,并且在您的异步任务中,您正在调用以下行

//start another activity
Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
((Context)params[0]).startActivity(intent);

因此,只要异步任务完成其任务,它就会启动另一个活动。所以你假设android正在启动错误的活动。但是在内部,您正在启动活动,并且您的异步仅在几微秒内完成,因此您假设启动了错误的活动..

于 2012-04-24T18:07:59.783 回答
1

您不能从doInBackground()不是 UI 线程的线程访问方法(和其他 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 时声明参数。

我不确定这是否能解决您的问题,但这是一个提示......

于 2012-04-22T10:03:34.357 回答
0

还有一件事,你在 Manifest 文件中声明的 AnotherActivity 有问题,不是吗?

<activity
    android:name="AnotherActivity"
    android:label="@string/app_name">
</activity>

我认为它应该有一个点。像

android:name=".AnotherActivity"

于 2012-04-22T09:48:53.083 回答
-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>

所以它不会作为主要启动。还要检查清单中的意图过滤器,看看它们是否正确或存在。

于 2012-04-22T09:36:49.560 回答