【问题标题】:How to call another activity after certain time limit如何在一定时间限制后调用另一个活动
【发布时间】:2011-03-30 11:31:59
【问题描述】:

如何给一个活动调用另一个活动的时间限制。我想在给定的时间限制内调用另一个活动(例如将 A 类调用到 B 类)。我使用了alarmManager,但我的应用程序不可能使用线程,每当我给Thread.sleep它不会执行操作,直到睡眠结束。我不确定如何执行此过程。任何人都可以给出一个给上课时间限制的想法。

【问题讨论】:

    标签: java android multithreading


    【解决方案1】:

    您可以使用Timer 并添加在特定延迟后执行的TimerTask

    这是一个或多或少完整的例子:

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
    
       public void run() {
    
          //here you can start your Activity B.
    
       }
    
    }, 10000);
    

    上面的例子在 10 秒内执行了一个新的 TimerTask。在 TimerTask 中,您可以覆盖 run 方法。在 run 方法中,您可以开始新的活动。 run 方法在延迟之后执行。在本例中为 10'000 毫秒。

    【讨论】:

    • @Roflcoptr 我试过这个,但是每当时间结束时,它就会显示强制关闭错误。它永远不会去活动 B。我不知道错误在哪里。请指导我.. 感谢您的即时回复....
    • @HariRam 你必须发布 logcat,否则我无能为力。
    • WARN/dalvikvm(4645): threadid=7: thread exiting with uncaught exception (group=0x4001d800) ERROR/AndroidRuntime(4645): FATAL EXCEPTION: Timer-0 ERROR/AndroidRuntime(4645): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() ERROR/AndroidRuntime(4645): at android.os.Handler.<init>(Handler.java:121) ERROR/AndroidRuntime(4645): at android.widget.Toast.<init>(Toast.java:68)
    • ERROR/AndroidRuntime(4645): at android.widget.Toast.makeText(Toast.java:231) ERROR/AndroidRuntime(4645): at com.example.Task.jokedescription$1.run(jokedescription.java:186) ERROR/AndroidRuntime(4645): at java.util.Timer$TimerImpl.run(Timer.java:289) WARN/ActivityManager(59): Force finishing activity com.example.Task/.jokedescription
    • 情况越来越复杂了。我个人建议打开一个新问题,在上面的 run 方法中发布代码,并从那里开始新活动的 oncreate 方法。
    【解决方案2】:

    这是一个简单的解决方案。例如,这可以用于显示 1 秒钟的启动活动,然后进入主应用程序:

    public class Splash extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.splash);
    
                int secondsDelayed = 1;
                new Handler().postDelayed(new Runnable() {
                        public void run() {
                                startActivity(new Intent(Splash.this, ActivityB.class));
                                finish();
                        }
                }, secondsDelayed * 1000);
        }
    }
    

    【讨论】:

      【解决方案3】:

      这也可以使用 android CountDownTimer 类来完成。

      请参阅此示例了解 3 秒延迟。

      new CountDownTimer(3000, 1000) {
          public void onFinish() {
               Intent startActivity = new Intent(ThisActivity.this,ActivityToStart.class);
               startActivity(startActivity);
              finish();
          }
      
          public void onTick(long millisUntilFinished) {
          }
      
      }.start();
      

      您可能还需要在AndroidManifest.xml 文件中定义您的父活动,

      <activity
            android:name=".ActivityToStart"
            android:label="Back"
            android:parentActivityName=".MainActivity" >
      
            <!-- Parent activity meta-data to support 4.0 and lower -->
            <meta-data
                 android:name="android.support.PARENT_ACTIVITY"
                 android:value=".MainActivity" />
      </activity>
      

      【讨论】:

      • startActivity(startActivity);这是递归函数吗?
      【解决方案4】:

      希望下面的例子能有所帮助。

      我在 一定时间(本例中为 2 秒)后从 MainPage.java

      致电 MainActivity.java

      代码:

      public class MainPage extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main_page);
              Handler handler=new Handler();
              handler.postDelayed(new Runnable() {
                  @Override
                  public void run() {
                      startActivity(new Intent(MainPage.this,MainActivity.class));
                  }
              },2000L);
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-20
        相关资源
        最近更新 更多