gpt4 book ai didi

java - 诊断 android 3.0 中不需要的 onPause

转载 作者:行者123 更新时间:2023-12-01 15:34:03 25 4
gpt4 key购买 nike

我有一个应用程序,它在 Android 2.3.5 手机上运行良好,但在 Android 3.0 模拟器上崩溃。我添加了许多 Logcat 消息来尝试找出两个设备上行为的任何差异。发生奇怪事情的关键代码(简化)位于我的启动屏幕 Activity 中:

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.splash);

Thread timer;
timer = new Thread()
{
public void run()
{
try
{
sleep(2600);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
finally
{
Intent in;
in = new Intent("android.intent.action.TTMODESELECT");
startActivity(in);
}
}
};
timer.start();
}
protected void onPause()
{
super.onPause();
finish(); // kill the launcher - free its memory
}

在 2.3.5 设备上运行,我看到它开始然后完成 sleep() 然后启动 android.intent.action.TTMODESELECT,但在 3.0 下我看到它开始 sleep - 但它永远不会完成,而是 onPause我的闪屏类的方法被调用,在新 Activity 开始之前发生一个 finish() 。

知道我能做些什么来解决这个问题吗?

最佳答案

恐怕系统可以随时调用onPause()/onResume()。您无法阻止它执行此操作,因此您无法以这种方式修复它。

如果您希望启动器 Activity 在实际 Activity 出现在其顶部时消失,那么执行 startActivity(in); 是完全可以接受的。 finish(); 在调用真正的启动器后关闭启动器。然后你只需完全省略 onPause() 即可。

顺便说一句,我很确定您无法从引擎线程可靠地调用 startActivity() (finish() 也是如此)——您会需要使用 Activity.runOnUiThread() 将其委托(delegate)给您的 UI 线程。这里更干净的解决方案可能是执行以下操作:

Handler handler = new Handler();
handler.postDelayed(
new Runnable()
{
@Override
public void run()
{
startActivity(...insert code here...);
finish();
}
},
2600 * 1000 /* ms */);

这完全避免了线程问题。

关于java - 诊断 android 3.0 中不需要的 onPause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9192703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com