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

あなたのコードから、アンドロイドが正しいアクティビティを開始していることを理解しました。

しかし、あなたの 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

そして一つ、マニフェストファイルで宣言した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 に答える