私はゲームのデータベースに取り組んでいます。
1つのアクティビティからスコアを取得し、それをデータベースアクティビティで呼び出します。ここで、インテントを使用してデータベースでスコアが更新され、インテントが実行されるとゲームが一時停止します。
また、アプリケーションクラスを使ってみました(その提案は大歓迎です)。
ゲームプレイを中断しないようにバックグラウンドでインテントを起動することにより、アクティビティ間でデータを渡す方法はありますか?
私はゲームのデータベースに取り組んでいます。
1つのアクティビティからスコアを取得し、それをデータベースアクティビティで呼び出します。ここで、インテントを使用してデータベースでスコアが更新され、インテントが実行されるとゲームが一時停止します。
また、アプリケーションクラスを使ってみました(その提案は大歓迎です)。
ゲームプレイを中断しないようにバックグラウンドでインテントを起動することにより、アクティビティ間でデータを渡す方法はありますか?
データベースはアクティビティ内にあってはなりません。アクティビティは、アプリケーションの 1 つの画面 (または 1 つのユース ケース) を表し、データベース クラスのような実装の詳細を表すべきではありません。
別の方法として、同じアプリケーション内のどこからでもアクセスできる Singleton クラスにデータベース コードを配置できます。また、アプリケーションの onCreate メソッドでデータベースを作成し、そこにある静的フィールドに格納するか、静的メソッドを公開してデータベースにアクセスする別のクラスを作成することもできます。
インテントの使用に何らかの形で行き詰まっている場合は、アクティビティの代わりにデータベース サービスを使用する必要があります。このようにして、データをサービスに送信すると、現在のアクティビティが一番上に残ります。しかし、それは単純な静的クラス/シングルトン アプローチと比較して、非常に複雑になります。
あなたは大きな取り違えをしているようです: . があるべきではありませんdatabase activity
. データベース ヘルパー クラスを作成し、それをアプリケーション クラスのメンバー変数にする必要があります。
// inside application class
private static MyDatabaseHelper mMyDB;
public MyDatabaseHelper static getDatabase() {
if (mMyDB == null) {
// mInstance should be the application instance, means make the
// application class a singleton
mMyDB = new MyDatabaseHelper(mInstance);
// the constructor should open/create the database
}
return mMyDB;
}
これにより、どこからでもデータベースを操作できます。
これにより、どこからでもすべての値を簡単に更新できます。したがって、値を渡すためにインテントを起動する必要はありません。代わりに、データベースを直接更新してください。
これには複数の方法があります。ハンドラー、サービスを使用してから、親アクティビティのonactivity結果にコールバックするsetresultを使用できます。
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1);
intent.putExtras(b);
startActivity(intent);