인터넷에 널린 소스나 강좌들은 전부 3초후에 걍 닫는거라 이걸 왜 이럴까 하는 의문에 만들어본 소스입니다.
어제 질문글에서 어떤분께서 Handler를 전역으로 선언해서 쓰면 다른데서 충돌이 날 지도 모른단 말을 듣고 덜덜덜 겁을 먹고 수정을 해 봤는데요,
순수하게 제 주관으로만 만든거라 헛점이 있을수도 있는데, 그 헛점을 좀 잡아주셨으면 해서 소스 올려봅니다.
MainActivity 부분
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent itt = new Intent(this, SplashActivity.class); // 로딩화면 준비
startActivity(itt); // 스플레시 엑티비티 시작
}
}
SplashActivity 부분
public class SplashActivity extends Activity {
Handler handler; // 헨들러 선언
Loading loader; // 로더 클래스 선언
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
init(); // 핸들러 시작
loader = new Loading(handler); // 로더 클래스에 핸들러를 던져줌 ( 로딩 종료후 핸들러에 메세지를 보내면 스플레시 엑티비티를 종료
new Thread(loader).start(); //로딩 시작
}
public void init(){
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Toast.makeText(getApplicationContext(), "Loading Complete",Toast.LENGTH_LONG).show();
finish();
}
};
}
}
Loading 부분
public class Loading implements Runnable {
Handler handler;
public Loading(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
try {
Thread.sleep(2000); // 실제 로딩시에는 로딩 작업을 처리
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(0); // 핸들러에 메세지를 던지면 스플레시가 종료
}
}
별다른건 없고
메인 엑티비티에서 스플레시 액티비티를 스타트 시켜주고
스플레시액티비티에서는 핸들러를 하나 선언해주고, 그 핸들러를 로더에게 던져주면서 스레드로 실행합니다.
그리고 스레드에서 로딩 작업이 끝나면, 스플레시가 던져줬던 핸들러에게 메세지를 보내고
메세지를 받으면 로딩이 완료됐다고 뜨면서 스플레시를 종료시키고 메인 액티비티가 노출이 됩니다.
아.. 뭔가 허술한거같긴한데.. 3초후에 종료 이런거보다는 나을지도 모를것 같아서요 -_-;;
안드로이드 귀신분들 좀 붙어서 씹고뜯고 맛보고 즐기고 좀 해주세요 ^^;;