0

私たちはAndroid用のかなり複雑なソフトウェアのセットに取り組んでいます。物事(一般的なタスクなど)を簡素化するために、私はソフトウェアが行うこと(データベースアクセスなど)の一部をアプリケーションに移動して、さまざまなアクティビティが必要なときにそれらにアクセスできるようにしています。

アクティビティではgetApplication() to、アプリケーションのデータメンバーへのアクセスを取得することはできますが、アプリケーションからその逆を行う方法がわかりません。Androidアプリケーションから依存するアクティビティに「可視性」を持たせる簡単な方法はありますか?

4

2 に答える 2

1

クラスは(一般に) 、他のコンポーネントApplicationに関係するべきではありません。Activity

SQLiteOpenHelper単純にデータベース ヘルパーを作成し (たとえば、拡張)、Applicationそれに対する静的参照を作成して保持します。

public class MyDBHelper extends SQLiteOpenHelper {
    ...
}

のためにApplication...

public class MyApp extends Application {

    protected static MyDBHelper dbHelper = null;

    @Override
    public void onCreate() {

        dbHelper = new MyDbHelper();
        ...
    }
}

次に、任意のアプリ コンポーネントで...

MyApp.dbHelper.someMethod();
于 2012-05-16T18:07:43.807 に答える
0

私たちが行ったことは、BaseActivityクラスを作成することです。すべてのアクティビティはBaseActivityクラスから継承します。BaseActivityアクティビティ スタックを自分で追跡できるように、ほとんどのライフサイクル メソッドをオーバーライドしました。このようにして、どのアクティビティが「現在の」アクティビティであるかを判断できます。BaseActivityアクティビティから情報を取得するには、継承されたアクティビティでオーバーライドされる でアクセス メソッドを提供できます。

きっと他の方法もあると思います。

この種のアーキテクチャの最大の問題は、どのアクティビティが現在実行中のアクティビティ (つまり、アクティビティ スタックの一番上にあるアクティビティ) であるかを判断する信頼できる方法がないことです。すべてのタスクへのアクセス許可を持っていることに依存するハックな方法がいくつかありますが、これは実際には良くありません。

Android は、どのアクティビティがスタック内にあり、どの順序であるかをアプリケーションが判断する方法を提供する必要がありますが、そうではありません。

これを行うときは、Android が必要なときにいつでもプロセスを強制終了できる (および強制終了する) ことに注意してください(バックグラウンドにある場合)。また、ユーザーがアプリケーションに戻ると、プロセス (およびアプリケーション インスタンス) が再作成されます。次に、タスク スタックの一番上にあったアクティビティのみを再作成します。ユーザーが戻ってこない限り (そして戻るまで)、一番のアクティビティの下にあるすべてのアクティビティを再作成するわけではありません。

于 2012-07-05T09:16:44.380 に答える