Я занимаюсь разработкой приложения для 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;
}
}