2016-04-22 16 views
0

asynctaskを使用してサーバーからファイルをダウンロードするアプリケーションを作成しました。それにはいくつかの活動があります。私はアクティビティAから1つのasynctaskを開始し、アクティビティBからそれを停止したいと思います。どうすればそれを達成できますか?他のアクティビティからasynctaskを停止

+0

あなたは以前にsharedprefrenceを使用していますか?それを使ってみてください。あなたの問題を解決します。 –

答えて

0

あなたの活動BにgetParentActivity()メソッドの型キャストを使用して、前のアクティビティのパブリックメソッドを呼び出すことが可能である:

((PreviousActivity)getParentActivity()).somePublicMethod(); 

のみ動作したい場合は、アクティビティAからのアクティビティBを開いた場合すべてのアクティビティからそのメソッドを呼び出せるようにするには、静的クラスを作成してアクティビティAのインスタンスを保存してみてください。この方法で、アプリケーションのどこにいてもメソッドを呼び出すことができます。これを行うときにはnull値にも注意してください。

これは静的クラスのサンプルです。

public static class Constants{ 
    public static ActivityA activityAInstance; 
} 

あなたはActivityA(onCreateメソッド)を開くことは、インスタンスの保存:

Constants.activityAInstance = ActivityA.this; 

この部分はあなたの静的クラスにActivityAのインスタンスが保存されます。どこにいても、そのインスタンスにアクセスして公開メソッドを呼び出すことができます:

アプリは、あなたがしなければならないすべてはあるActivityZにある輸入ActivityAインスタンス静的クラスとを呼び出すこと:

Constants.activityAInstance.somePublicMethodToStopTheAsyncTask(); 
+0

ええと、静的変数にasynctaskを格納しようとしました。 null値を返すこともあります。私はこれのためのより良い解決策を探しています。 –

+0

いいえ、非同期タスクではなく、アクティビティAのインスタンスです。そのインスタンスを格納する独立した静的クラスを作成します。アプリのどこにでも公開メソッドを呼び出すことができます。 – MetaSnarf

+0

私の答えを編集しました。 – MetaSnarf

0

私の意見では、あなたが活動Aでブールフラグを設定することができ、あなたがasynctaskを実行するときに、あなたがすべきこのフラグをいつでもチェックしてください。停止したい場合はフラグを変更するだけで、アクティビティBのこのフラグを変更してasynctaskを停止することができます。

これを試してください。

+0

それは1つのasynctaskではありません。サーバーからダウンロードファイルを表示するには、リストビューに多くのasynctasksがあります。 –

0

LocalBroadcastIntentを使用してアクティビティBからアクティビティAにメッセージを送信できると思います.Aのメソッド受信者では、Asynctask.cancel(true)を呼び出すことができます。 Asynctask.cancel(true)を呼び出すときに、タスクを停止するには、
if(isCanceled()){ break; }
をasynctaskのループに配置する必要があります。

+0

上記の私のコメントを読んでください。 –

+0

多くのタスクでこのアプローチを使用できます。 – sonngaytho

関連する問題