[android] Android SplashScreen
기본적으로 응용 프로그램 자체를 시작할 때 많은 데이터를 다운로드하여 ListActivity에 표시하는 응용 프로그램을 개발 중입니다. 내가 할 계획은 데이터가로드 될 때까지 스플래시 화면을 표시하는 것입니다.
지금까지 나의 모든 시도는 헛된 것이었다. anddev.org에서 언급 한 방법을 시도했지만 내 문제는 주요 활동이 시작되어야하지만 ListActivity를 채울 때까지 스플래시 화면이 표시되어야한다는 것입니다. 간단히 말해서 다음 단계를 거쳐야합니다.
- 내 주요 활동을 시작하십시오.
- 스플래시 화면을 표시합니다.
- 백그라운드에서 프로세스를 계속 실행하십시오.
- 처리가 완료되면 스플래시 화면을 종료하고 기본 목록을 표시합니다.
그것이 어떤 것인지 이해하기를 바랍니다 ….
답변
문제는 수행중인 모든 작업과 동일한 스레드에서 스플래시 화면 ( 내가 생각 하는 ProgressDialog 와 같은 일종의 대화 상자)을 실행하고있을 가능성이 큽니다 . 이렇게하면 스플래시 화면보기가 업데이트되지 않고 화면에 표시되지 않을 수도 있습니다. 시작 화면을 표시하고 AsyncTask 인스턴스를 시작하여 모든 데이터를 다운로드 한 다음 작업이 완료되면 시작 화면을 숨겨야합니다.
따라서 Activity의 onCreate () 메서드는 단순히 ProgressDialog를 만들고 표시합니다. 그런 다음 AsyncTask를 만들고 시작합니다. AsyncTask를 기본 Activity의 내부 클래스로 만들어서 Activity의 일부 변수에 다운로드 한 데이터를 저장하고 onPostExecute () 메서드에서 ProgressDialog를 닫을 수 있습니다.
코드를 보여주지 않고 더 이상 정교하게 만드는 방법을 모르기 때문에 여기에 있습니다.
public class MyActivity extends Activity {
private ProgressDialog pd = null;
private Object data = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Show the ProgressDialog on this thread
this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);
// Start a new thread that will download all the data
new DownloadTask().execute("Any parameters my download task needs here");
}
private class DownloadTask extends AsyncTask<String, Void, Object> {
protected Object doInBackground(String... args) {
Log.i("MyApp", "Background thread starting");
// This is where you would do all the work of downloading your data
return "replace this with your data object";
}
protected void onPostExecute(Object result) {
// Pass the result data back to the main activity
MyActivity.this.data = result;
if (MyActivity.this.pd != null) {
MyActivity.this.pd.dismiss();
}
}
}
}
분명히 거기에 채워야 할 몇 가지 부분이 있지만이 코드가 실행되고 좋은 시작점을 제공해야합니다 (코드 오류가있는 경우 용서해주세요. 입력 할 때 Android SDK에 액세스 할 수 없습니다. 현재).
Android의 AsyncTasks 주제에 대한 더 많은 좋은 자료는 여기 와 여기 에서 찾을 수 있습니다 .
답변
참고로 이것이 스플래시 화면을 만드는 가장 좋은 방법입니다.
http://android-developers.blogspot.de/2009/03/window-backgrounds-ui-speed.html
나는 이것을 안드로이드 문서에서 꽤 오랫동안 찾고 있었다. 검은 화면을 피하고 싶다면 windowBackground로 테마를 만들어야한다.
<resources>
<style name="Theme.Shelves" parent="android:Theme">
<item name="android:windowBackground">@drawable/background_shelf</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
그리고이 테마를 주요 활동의 테마로 설정하십시오 … TADA, 처음부터 시작 화면.
채우기 위해 늘어나는 이미지뿐만 아니라 복잡한 배경을 원할 경우 Drawables를 사용할 수 있습니다. 다음은 로고를 검은 색 배경으로 중앙에 유지하는 레이어 목록의 예입니다.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@color/black">
</item>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/logo"
android:tileMode="disabled" >
</bitmap>
</item>
</layer-list>
답변
스플래시 화면 예 :
public class MainActivity extends Activity {
private ImageView splashImageView;
boolean splashloading = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
splashImageView = new ImageView(this);
splashImageView.setScaleType(ScaleType.FIT_XY);
splashImageView.setImageResource(R.drawable.ic_launcher);
setContentView(splashImageView);
splashloading = true;
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
splashloading = false;
setContentView(R.layout.activity_main);
}
}, 3000);
}
}
답변
- 내 주요 활동을 시작하십시오.
- 스플래시 화면을 표시합니다.
- 백그라운드에서 프로세스를 계속 실행하십시오.
- 처리가 완료되면 스플래시 화면을 종료하고 기본 목록을 표시합니다.
이런 식으로 시도했지만 문제는 다음과 같습니다. 스플래시 화면 활동을 시작하기 전에 주요 활동이 표시됩니다.
나는 이렇게 만들었다.
- 스플래시 화면 시작
- 프로세스가 완료되면 “주 활동”을 시작합니다.
- 뒤로 버튼을 처리하는 것을 잊지 마십시오. 앱을 닫아야합니다. 메인 활동에서 눌려 질 것입니다. 그렇지 않으면 스플래시 화면으로 돌아갑니다 (루프).
내 문제는 메뉴 버튼을 눌러 “스플래시 화면 활동의 메뉴 표시”를 비활성화하는 방법입니다.
편집하다:
표시 메뉴 비활성화 :
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.activity_main, menu);
return false;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// return super.onMenuItemSelected(featureId, item);
return false;
}