0

我有一个活动,我想在它运行时运行延迟函数。我[i]不[/i]想要延迟OnClick功能,我想要延迟活动[i]开始[/i]。

我尝试了以下解决方案:

  1. 如何在 Android onClick 函数中设置延迟
  2. 如何在 Android 上暂停/延迟?
  3. Android:计时器/延迟替代方案
  4. Android定时器设置延迟

......还有更多,他们都没有做我想要的。我想要在活动开始时延迟(对于我的项目,当游戏开始时)但是使用该代码,当我将手指放在屏幕上时它会开始延迟(例如 10 秒)。

4

1 回答 1

2

您应该在 onCreate(..) 函数中的“setContentView(R.layout.xxxx..)”之前放置一个Thread.sleep(long) 。这样,它实际上会在向您显示 Activity 的元素之前延迟。

如果您想在 onCreate(...) 被触发之前延迟,则方法需要有所不同,这里有一个建议:

运行服务并使用 ActivityManager 类检查前台应用程序(参见下面的示例代码)。继续检查您的应用何时被触发或被带到“前台”(使用下面的代码),然后返回主屏幕并启动计时器(在服务本身中)。计时器到期后,启动您的应用程序。

您可以在 Service 的 AsyncTask 中运行以下函数。

这两种方法完全不同,实际上取决于您要实现的目标。

@SuppressWarnings("deprecation")
    private void getRunningAppName() throws NameNotFoundException {
        Log.v("neiltag", "Entered getRunningAppName()");
        ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        // The first in the list of RunningTasks is always the foreground task.
        RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);

        String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();
        PackageManager pm = this.getPackageManager();
        PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);
        String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();
        String packageName = foregroundAppPackageInfo.packageName;



        if(foregroundTaskAppName.matches("<NAME OF YOUR APP HERE>")) {

            //If your app is fired go back to the Homescreen(i.e. the delay)
            Intent startMain = new Intent(Intent.ACTION_MAIN);
            startMain.addCategory(Intent.CATEGORY_HOME);
            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startMain);

            handler.post(new Runnable() {  
                   @Override  
                   public void run() {  
                      Toast.makeText(getApplicationContext(), "You are not allowed to open Facbeook now, sorry!", Toast.LENGTH_SHORT).show();  
                   }  
                });


        } 

                           //ADD A TIMER HERE 
                           //ONCE TIMER EXPIRES, FIRE UP YOUR APP AGAIN 

    }
于 2014-02-08T11:01:59.983 回答