私のシナリオでは、スプラッシュアクティビティで5スレッドの並列コールが発生しますが、ダッシュボードをロードできるように1つの特定のスレッド(DashBoardCallable)のエクステンションを待つ必要がありますデータは、ダッシュボードデータがロードされるまでスプラッシュ画面を表示し、ダッシュボードデータがロードされると同時にアクティビティを変更します。同時に、そのユーザーに関連するいくつかのデータをバックグラウンドで読み込みます(スレッドユーティリティクラスが行います)。アンドロイドのスプラッシュスクリーンでコール可能なコールを待つ方法
これを理解すると、5つのスレッドからなるExecutorServiceが並列呼び出しに使用され、Splashscreenは5から1つのスレッド実行に基づいています。このスレッドの実行が完了すると、他のスレッドの実行はバックグラウンドで残ります。これはthreadUtilクラスです
public class DashBoardCallable implements Callable<String> {
private Context context;
private int user_id;
public DashBoardCallable(Context context,int user_id){
this.context = context;
this.user_id = user_id;
}
@Override
public String call() throws Exception {
HttpUtil httpUtil = new HttpUtil();
httpUtil.setUrl("URL");
httpUtil.setType("GET");
return httpUtil.getStringResponse();
}
}
::これは呼び出し可能dashboaordが
ExecutorService executor = Executors.newFixedThreadPool(5);
SharedPreferences sharedpreferences = getSharedPreferences(getResources().getString(R.string.mypreference_key), Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = sharedpreferences.edit();
ThreadUtil datatype1 = new ThreadUtil(editor,3504,"URL","DATATYPE1","DATATYPE1");
ThreadUtil datatype2 = new ThreadUtil(editor,3504,"URL","DATATYPE2","DATATYPE2");
ThreadUtil datatype3 = new ThreadUtil(editor,3504,"URL","DATATYPE3","DATATYPE3");
ThreadUtil datatype4 = new ThreadUtil(editor,3504,"Different URL","DATATYPE1","DATATYPE1");
DashBoardCallable dashBoardCallable = new DashBoardCallable(SplashScreenActivity.this,3504);
FutureTask<String> dashboardFuture = new FutureTask<String>(dashBoardCallable);
executor.execute(datatype1);
executor.execute(datatype2);
executor.execute(datatype3);
executor.execute(datatype4);
executor.execute(dashboardFuture);
String response =dashboardFuture.get();
である:以下
スプラッシュアクティビティコードである :public class ThreadUtil implements Runnable {
private int user_id;
private String url,type,stored_name;
private SharedPreferences.Editor editor;
public ThreadUtil(SharedPreferences.Editor editor, int user_id, String url, String type,String stored_name){
this.editor = editor;
this.user_id = user_id;
this.url = url;
this.type = type;
this.stored_name = stored_name;
}
@Override
public void run() {
HttpUtil httpUtil = new HttpUtil();
httpUtil.setUrl(url);
httpUtil.setType("GET");
String jsonresponse =httpUtil.getStringResponse();
Gson gson = new Gson();
switch (type){
case "DATATYPE1":
saveDATATYPE1(jsonresponse,gson,editor);
break;
case "DATATYPE2":
saveDATATYPE2(jsonresponse,gson,editor);
break;
case "DATATYPE3":
saveDATATYPE3(jsonresponse,gson,editor);
break;
}
}
private void saveDATATYPE1(String jsonresponse, Gson gson,SharedPreferences.Editor editor) {
if(!jsonresponse.equalsIgnoreCase("null")){
editor.putString(stored_name, jsonresponse);
editor.apply();
editor.commit();
}
}
private void saveDATATYPE2(String jsonresponse, Gson gson, SharedPreferences.Editor editor) {
try {
Type listType = new TypeToken<List<AssessmentPOJO>>() {}.getType();
ArrayList<AssessmentPOJO> dashboardCards = (ArrayList<AssessmentPOJO>) gson.fromJson(jsonresponse, listType);
for(AssessmentPOJO assessmentPOJO:dashboardCards){
System.out.println("XXBBXBXBXBXB -> "+assessmentPOJO.getName());
if(assessmentPOJO != null){
editor.putString(stored_name+assessmentPOJO.getId(), gson.toJson(assessmentPOJO));
editor.apply();
editor.commit();
}
}
}catch (JsonSyntaxException jse){
jse.printStackTrace();
}catch (Exception e){
}
}
private void saveDATATYPE3(String jsonresponse, Gson gson,SharedPreferences.Editor editor) {
if(!jsonresponse.equalsIgnoreCase("null")) {
Type listType = new TypeToken<List<CoursePOJO>>() {}.getType();
ArrayList<CoursePOJO> coursePOJOs = (ArrayList<CoursePOJO>)gson.fromJson(jsonresponse, listType);
for(CoursePOJO coursePOJO:coursePOJOs){
if(coursePOJO != null){
editor.putString(stored_name+coursePOJO.getId(), gson.toJson(coursePOJO));
editor.apply();
editor.commit();
}
}
}
}
}
これはHttpUtilクラスです
コードを投稿して試したことを表示できますか? – wnieves19
Feroz、この "質問"(質問さえありません)に私たちが答えるとどう思いますか?私たちは何を言いますか? 「活動を開始し、結果が到着するまでスプラッシュを表示してからユーザーをナビゲートする」 – azizbekian
すごく残念ですが、コードは巨大に見えます。コードが更新されました –