안녕하세요?
startActivity 로 다른 어플을 실행할 때 매번 어플 실행 속도가 다르다는 것을 알았습니다.
좀 테스트를 해보니, 다음의 경우 명확히 그 속도차가 들어났습니다.
참고로... 제 앱은 더블클릭이라는 앱이며, 서비스로 돌면서 타 어플을 실행해주고 있습니다.
1. 메뉴 진입 -> Back key 로 Home 진입 -> startActivity
2. 메뉴 진입 -> Home key 로 Home 진입 -> startActivity
1번의 경우 startActivity 함수가 호출되고 거의 바로 다른 어플이 실행됩니다.
2번의 경우 startActivity 함수가 호출되고 약 3초~5초정도의 시간이 지난 후 다른 어플이 실행됩니다.
혹시 이게 왜 이러는지,, 아시는 분 있으신가요?
조언 부탁드리겠습니다.
의견 주셔서 감사합니다.^^ 저도 막연히 activity life cycle이나 task stack등에 의해 영향을 받지 않을까 하는데,, 일단 의견주신 내용은 제가 문의한 문제와 다른 내용인것 같습니다. 제가 back key 혹은 home key를 이용해 home에 진입한 후 실행하는 어플은 '더블클릭' 이라는 앱이 아니라, 다른 어플리케이션입니다. 다른 어플리케이션을 launch 해주는 주체는 더블클릭 액티비티가 아니라, 백그라운드로 돌아가는 서비스입니다. 적으면서도 제가 헤깔리네요.^^ 무엇이 어떤 영향을 주어서 특정 어플이 실행하는데 시간이 걸리는지..
Context Switching 될때 되찾아야 할 데이터들의 node가 많아서 그런게 아닐까? 하는 막연한 생각이 드네요..
startActivity 를 class 의 로 호출하는 방법을 해야 할거 같습니다. 인텐트 필터링을 덜 거치려면 직관적인게 좋죠..
서비스에서 어플리케이션을 런칭해주는 부분의 코드 입니다.
아래와 같이 명시적으로 클래스 이름을 정해주고 실행하는 것을 말씀하시는 건가요?
아래와 같이 하고있는데 문제가 발생하고 있습니다..
String pkgname ="some package name";
String comname ="some component name";
ComponentName name = new ComponentName(pkgname, comname);
Intent i=new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
i.setComponent(name);
getApplication().startActivity(i);테스트하다 발견한 내용 한가지는,, 2번케이스에서 home key로 home screen 진입 후 약 5초정도 기다렸다가 startactivity로 다른 어플리케이션을 실행하면 딜레이가 없다는 것입니다. 이때문에,, home key로 home screen 진입 시에 task switching을 위한 시간이 필요한건 아닌지,, 그래서 늦게실행되는게 당연한 결과가 아닌지 의심했으나, home key로 home 진입후 home에 있는 shortcut을 통해 어플을 실행하면(제 서비스에서 어플을 실행하는것이 아니라) 대기시간과 상관없이 바로 어플이 실행되는 걸 보고,, 머리만 더 복잡해졌네요.. ㅎ




Android Life cycle에 대해서 공부를 하시면 될것 같습니다.
정확한건 아니지만
제 생각에는
1번의 경우에는 Back Key를 이용해서 Home에 진입하시면 onDestory가 불러져서 Activity가 종료된 상태인것 같습니다.
그리하여 해당 "더블클릭"이라는 app이 바로 실행이되는데 있어서 문제가 생기지 않지만
2번의 경우에는 Home Key를 입력받아 Home에 진입을 하시면 onResume이 불러져 Background에서 그대로 실행중이기 때문에
다른 app을 실행할때 영향을 주는것 아닌가 생각이 듭니다.
정확한건 아니고 Activity Life cycle과 관련된 내용인거 같아 제생각을 적어봅니다.
그냥 생각뿐이니 참고하시고, Life Cycle과 관련된 글을 찾아보셔서 공부하시면 될거 같네요