Скорость запуска на startActivity - PullRequest
6 голосов
/ 07 ноября 2011

Я занимаюсь разработкой приложения для Android, которое запускается в качестве службы для запуска

других приложений в определенных условиях.

Существует много возможностей использовать функцию 'startActivity'.

Я заметил, что иногда запуск другого приложения с использованием startActivity занимает слишком много времени.

Пожалуйста, посмотрите следующие два случая.

case 1: Menu -> Back key -> Home-> startActivity

case 2: Menu -> клавиша Home -> Home -> startActivity

В первом случае нет задержки для запуска нового приложения.

Ново втором случае запуск нового приложения занимает 3 ~ 5 секунд.

Я пробовал много раз, но результаты были одинаковыми.

Пожалуйста, помогите мне решить эту проблему.

Почему это занимает много времени только во втором случае?

Мой код:

    public class LauncherService extends Service implements OnTouchListener {
long timeStamp;

 public void onCreate() {
     super.onCreate();
     Button mButton;
     mButton = new Button(this);
     mButton.setId(1);
     mButton.setOnTouchListener(this);

     mButton.setText("");

     WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.FILL_PARENT,
                WindowManager.LayoutParams.FILL_PARENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
                WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
                PixelFormat.TRANSPARENT);

     mButton.setBackgroundColor(Color.argb(0x00, 0x00, 0x00, 0x00));

     WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
     wm.addView(mButton, params);
 }

 public void launchActivity(){
     String pkgname ="some package name";
     String comname ="some component name";
     ComponentName name = new ComponentName(pkgname, comname);

     Intent i=new Intent(Intent.ACTION_MAIN);

     i.addCategory(Intent.CATEGORY_LAUNCHER);
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |       Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
     i.setComponent(name);
     getApplication().startActivity(i);
 }

public boolean onTouch(View v, MotionEvent arg1) {
    switch(v.getId()){
        case 1:
            {
                long now = System.currentTimeMillis();
                if((now - timeStamp <= 500)){
                    launchActivity();
                    break;
                }
                timeStamp = now;

            }
            break;
    }
    return false;
}

public IBinder onBind(Intent arg0) {
    return null;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...