【发布时间】:2011-03-30 11:31:59
【问题描述】:
如何给一个活动调用另一个活动的时间限制。我想在给定的时间限制内调用另一个活动(例如将 A 类调用到 B 类)。我使用了alarmManager,但我的应用程序不可能使用线程,每当我给Thread.sleep它不会执行操作,直到睡眠结束。我不确定如何执行此过程。任何人都可以给出一个给上课时间限制的想法。
【问题讨论】:
标签: java android multithreading
如何给一个活动调用另一个活动的时间限制。我想在给定的时间限制内调用另一个活动(例如将 A 类调用到 B 类)。我使用了alarmManager,但我的应用程序不可能使用线程,每当我给Thread.sleep它不会执行操作,直到睡眠结束。我不确定如何执行此过程。任何人都可以给出一个给上课时间限制的想法。
【问题讨论】:
标签: java android multithreading
【讨论】:
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
这是一个简单的解决方案。例如,这可以用于显示 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);
}
}
【讨论】:
这也可以使用 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);这是递归函数吗?
希望下面的例子能有所帮助。
我在 一定时间(本例中为 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);
}
}
【讨论】: