【发布时间】:2014-05-29 02:29:27
【问题描述】:
我对 Android 编程还是很陌生,现在正在努力改变屏幕方向。
我正在使用带有 FragmentPagerAdapter 的 viewPager,如 Android Developers 中所述,以显示两个通过选项卡访问的片段。
在 Fragment1 中,当按下按钮时会启动一个新线程。该线程计算数据并不断更新 UI(使用 UI 线程)。当再次按下按钮时,标志设置为 false,停止线程。当滑动到 Fragment2 或按下 home 键时,线程继续运行。当按下后退按钮时,活动和片段被破坏,线程也是如此(我认为?)。那将是预期的行为。
我想了解当屏幕改变方向时会发生什么。如果它正在运行,碎片和我的线程会发生什么?您能否指向一个链接,解释我应该如何在方向更改后继续保持线程运行和更新 UI?
编辑:我找到了一种获得我想要的行为的方法(如下所述)。不过,我仍然不确定幕后究竟发生了什么。
我只需要把这一行放在片段构造函数中:
savedInstanceState(true);
使用此行,屏幕旋转后 UI 仍会更新。由于按钮文本在激活时会发生变化,所以我还不得不在片段onCreateView() 方法中添加这样的内容:
if(flag) {
mStartButton.setText();
}
这些问题对我有帮助:
编辑 2: 以下是关于我的代码的一些附加信息。在我的片段OnCreateView() 中,我有一个简单按钮的监听器:
// Start-Stop button listener
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mIsRunning) { // START
// New thread
Thread myThread = new Thread(new Runnable() {
public void run() {
runFunction();
}
});
myThread.start();
mIsRunning = true;
mStartButton.setText(getString(R.string.stop));
}
else { // STOP
mIsRunning = false;
mStartButton.setText(getString(R.string.start));
}
}
});
runFunction() 的定义如下:
private void runFunction() {
while(mIsRunning) {
// Do something
}
}
【问题讨论】:
-
能否请您添加 AcrivityMain 代码如何处理方向更改您启动线程的方式
-
我更新了我的第一篇文章,提供了有关我的片段的更多信息。对于方向变化,除了我发布的内容之外,我没有做任何特别的事情。你想在 ActivityMain 中看到什么?它几乎是 android 文档的复制/粘贴。
标签: android multithreading android-fragments