私はDynamoDBのを使用して、私のアンドロイドアプリでアンドロイド用AWS SDKを使用しています、CognitoなどAWS SDKのコンテキストを含む参照 - アンドロイド
現在、私はいっぱいあるその多くは、多くのフラグメント、と単一MainActivity
クラスを使用しています画面。私のMainActivity
には、AWSHelper
クラスが含まれています。このクラスには、DynamoDBと通信するために必要なすべてのリファレンスが含まれています.Cognitoなどでサインインします。クラスには、フラグメントとダイアログの変更やコンテキストの必要な変更を行うためのMainActivity
。私は以前に私のAWSHelper
クラスへの静的参照を保持していましたが、このAWSHelper
クラスを使用するのが最良であるか唯一の方法ではないと感じています。
注:次のオブジェクトのほとんどは、MainActivity
のコンテキストを参照して作成されています。ここで
私は知らないので、私は、他の活動を使用したい、または活動の中に私の現在の断片のいくつかを作るが、私はそうしなかったであろういくつかの参照
private DynamoDBMapper dynamoDBMapper;
private AmazonDynamoDBClient ddbClient;
private CognitoUserPool userPool;
private CognitoUser cognitoUser;
//Created with a reference to context
userPool = new CognitoUserPool(mainActivity.getBaseContext(), POOL_ID, CLIENT_ID, CLIENT_SECRET, new ClientConfiguration());
の一例です私がDynamoDBとCognitoで現在持っているリファレンスを、再作成や静的リファレンスとして配置することなく維持する最良の方法ですが、これらのフィールドにはContext
の参照が含まれているので魅力的ではありません。最も大きな理由は、MainActivityコンテキストで作成されたCognitoUserPoolやその他の重要な参照をフォアグラウンドに新しいアクティビティがある場合に使用する災害のレシピのようで、MainActivityコンテキストはもはや利用される。
私のクラスには、私のAWS関連の機能のすべてにアクセスして実行する参照AWSHelper awsHelper;
があります。 AWSにアクセスするために必要なすべての私の断片では、onCreate()
で、私はここで
main = (MainActivity) getActivity; awsHelper = mainActivity.awsHelper
シナリオで持って、私はDynamoDBの中に保存されたデータとユーザプロファイルを開くしようとしています、私は一般的にawsHelper.openProfile(user);
呼ぶだろうメソッドopenProfile()
は、プロファイルをロードするAsyncTaskを起動し、フラグメントをすべてのデータを含むProfileFragmentに変更します。
私のAWSHelperクラスはフラグメントではなく、その中のメソッドはアプリのどこでも必要です。
アンドロイド用のAWS SDKの経験がある人は、どのようにして作業を進めていますか?
https://github.com/awslabs/aws-sdk-android-samples/tree/master/AmazonCognitoYourUserPoolsDemo/app/src/main/java/com/amazonaws/youruserpoolsなどのサンプルアプリケーションの中には、スタティックリファレンスを使用して以前使用していた方法を使用しているようです。しかし、これは1つの活動とはるかに簡単な小さなサンプルアプリケーションです。
私の唯一のアイデアは、以前に言及したすべてのAWSリファレンスを静的リファレンスとして保持することですが、アクティビティを切り替えるたびにAWSHelperを新しいコンテキストで再作成します。 MainActivityコンテキストはCognitoUserPoolなどでまだ参照されています。
すべてのヘルプを事前にお寄せいただきありがとうございます。
コンテキスト参照が悪い習慣はありません別の議論です。アクティビティ参照は以下のとおりです。あなたはApplicationクラス、あるいは他のシングルトン 'ContextWrapper'型オブジェクトを使うことができます –