1

我正在开发一个测试应用程序,它将一个接一个地连续启动设备上的每个应用程序。该应用程序主要用于通过上下文切换进行 UI 稳定性测试。我是 Android 新手,并试图找出沿途的事情。我将非常感谢任何建议

这就是我的应用程序应该做的事情:-

  1. 查询设备并获取设备上所有应用程序的列表,
    包括系统应用程序
  2. 现在依次启动每个应用程序,直到启动设备上的所有应用程序
  3. 一旦完成列表浏览一次,它将从列表中的第一个应用程序重新开始

    让我们调用我的应用 Launcher_app 并假设设备上有 5 个应用 A、B、C、D、E。Launcher 应用将依次启动 A,然后是 B、C、D、E,然后通过启动 A 重新启动。这是将一直持续到用户手动存在启动器应用程序

我尝试实现该应用程序,但我对 android 系统如何允许这样的上下文切换有几个问题。

这是自动启动每个应用程序的代码片段

ublic Runnable AutoLaunch = new Runnable() {

public void run()
{

   while(AppIndex < mAppsList.getCount())
   {


       //get the app name using index AppIndex
       //launch app using the appname
      App app = (App) mAppsList.getItemAtPosition(AppIndex);
     Intent i = getPackageManager().getLaunchIntentForPackage(app.getPackageName());
       try 
          {
             if (i != null) 
             {
                startActivity(i);

             } 
             else 
             {
                i = new Intent(app.getPackageName());
                startActivity(i);

             }
             for(int j=0;j<2000;j++)
                 for(int k=0;k<10000;k++)
                     continue;
             finish();

          } 
          catch (ActivityNotFoundException err) 
          {
             //Toast.makeText(ListInstalledApps.this, "Error launching app", Toast.LENGTH_SHORT).show();
          }

    if(AppIndex == mAppsList.getCount()-1)
          AppIndex = 0;
      else                
          AppIndex++;

   }

这是我的理解:-

启动器应用程序一开始将处于前台 (FG)。然后应用 A 进入前台 n Launcher_app 将进入后台(BG)。现在应用 B 进入 FG,应用 A 与 Launcher 应用一起进入 BG。以这种方式继续下去,有时应用程序 E 位于 FG 中,而包括 Launcher 应用程序在内的其余应用程序位于 BG 中。

当我尝试使用上述实现运行应用程序时,我看到应用程序正在启动,但应用程序顺序是随机的,此外,我在设备启动时没有看到非常多的应用程序,可能它发生得太快了....不确定。我直到我知道我在正确的轨道上才想继续

在这种情况下,对于下一次迭代,Launhcer 应用程序会按该顺序恢复应用程序 A、B、C、D、E 还是会重新启动每个应用程序?如果系统在实际场景中需要内存,Launcher 应用程序也会被杀死在 BG 中运行的设备上有近 50 个应用程序。或者系统会让我的应用程序保持活动状态,因为这是启动所有其他应用程序的主要应用程序。

请帮助我了解它是如何工作的,因为我真的想知道这样的应用程序是否可行?解决上述问题的最佳方法是什么。将不胜感激任何类型的指针/建议。

谢谢迷你

4

1 回答 1

2

这是什么:

for(int j=0;j<2000;j++)
    for(int k=0;k<10000;k++)
        continue;

如果您只是想引入延迟,您可以简单地睡一会儿或使用类似的东西postDelayed来间隔通话。

我同意你的猜测,即这些应用程序启动得太快了。您实际上是同时启动所有这些,因此您会看到似乎是随机顺序(由于启动时间不同)以及一些甚至没有时间在另一个获得焦点之前显示其 UI。

修复你的延迟代码,其中大部分应该会好得多。

于 2012-04-06T21:37:40.487 回答