안드로이드 개발 질문/답변
(글 수 45,052)
webview를 이용해서 브라우징을 하는 간단한 프로그램을 만들었습니다.
이 프로그램을 처음 실행할 때 splash screen을 display하는데 현재 구현은 splash 스크린을 약 2초간
보여주고
"다시는 이창 열지 않기"라는 옵션이 있는 dialog가 popup됩니다. 사용자가 dialog의 continue 버튼을 누르면
webview로 넘어가서 page를 loading하게 되는데요...
page loading 시간이 좀 깁니다.. 그래서...이 page loading activity를 프로그램 시작하자마자 background에서
실행하고 splash screen 이나 dialog box가 뿌려질 때도 loading을 계속하게 해서 continue 버튼을 눌러
webview를 뿌릴 때 loading을 마친 page화면을 보여주고 싶은데요.. 어떤 방식으로 구현을 해야할까요? Thread로 해야하나요.. Service로 해야하나요.. 아님 다른 더 간단한 방법이 있는지 알고 싶습니다...
이리저리 검색을 해 봤지만 뾰족한 답을 못얻었습니다. 고수님들의 도움이 절실합니다....
2010.02.26 09:38:40
음...정확하진 않은데, 백그라운드 서비스 혹은 좀 더 간편하게 Application 단에서 Thread 로 원하시는 URI 데이터를 먼저 쿼리한 후, 작업이 완료되면 Splash Activity 를 종료 시키고, webview 가 포함된 Acrivity 를 실행 시킬 수 있을거 같습니다만, (webview 의 페이지로드는 loadData API 를 사용해서...), 반드시 Splashview 를 Activity 형태로 사용하실 필요가 있는게 아니라면, Dialog 를 이용하시거나, 동일한 Activity 내에서 처음에 Splash View 를 Visible 하게 보이다가 로딩이 완료되면 Gone 처리하면 되지 않을까 됩니다.
2010.02.26 10:59:16
막장님, NOTIFY SERVICE를 어떤 방식으로 사용하면 되는지 좀 구체적으로 알 수 있을까요?
휴우님, 아쉽게도 GONE을 이용해서 처리는 불가능한 상황입니다. 처음 splash screen과 동시에 page loading하는 activity(webview)와 나중에 loading을 완료하고 화면에 보여주는 activity를 같은 activity, 즉, 동일한 webview class에서 처리하고 싶은데요. 가능할까요?
2010.02.26 15:07:16
음...GONE 을 사용하실 수 없다니 어떤 상황인지 궁금하네요. 좀더 자세히 말씀해 주시면 저에게도 큰 도움이 될것 같습니다.
혹시 도움이 되실가 싶어서 제가 사용한 코드를 올려본니다.
package com.huewu.example; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.LinearLayout; public class Splash extends Activity { private final static int FINISH_LOADING = 100; private final static int START_LOADING = 101; private LinearLayout mainLayout = null; private LinearLayout splashLayout = null; private Handler guiHandler = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mainLayout = (LinearLayout) findViewById(R.id.mainLayout); splashLayout = (LinearLayout) findViewById(R.id.splashLayout); guiHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch(msg.what){ case FINISH_LOADING: dismissSplash(); break; case START_LOADING: showSplash(); break; } super.handleMessage(msg); } }; guiHandler.sendEmptyMessageDelayed(START_LOADING, 0); guiHandler.sendEmptyMessageDelayed(FINISH_LOADING, 3000); } private void showSplash(){ splashLayout.setVisibility(View.VISIBLE); mainLayout.setVisibility(View.GONE); } private void dismissSplash(){ splashLayout.setVisibility(View.GONE); mainLayout.setVisibility(View.VISIBLE); } }//end of class
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/splashLayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_width ="fill_parent" android:layout_height="fill_parent" android:background="#FFFF0000"/> </LinearLayout> <LinearLayout android:id="@+id/mainLayout" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_width ="fill_parent" android:layout_height="fill_parent" android:background="#FF00FF00"/> </LinearLayout> </LinearLayout>
저 같은 경우는 NOTIFY SERVICE를 사용했습니다..