我有一个使用片段的MainActivity。
MainActivity的onCreate使用
完成onCreatewelcomeFragment = new MyWelcomeFragment();
fr.beginTransaction().replace(R.id.mainContent, welcomeFragment).commit()
作为OnWesume上MyWelcomeFragment的一部分,一个线程开始从我的网络服务器获取更新。如果用户在线程完成之前选择了一个动作并转到MyNewsFragment,那么尚未完成在MyWelcomeFragment的线程堆栈中运行的线程会发生什么?
使用以下函数创建线程:( myThread和handler是实例变量)
myThread = new Thread(new Runnable() {
@Override
public void run() {
sendDataToServer("");
handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
onTaskDone();
}
});
}
});
myThread.start();
答案 0 :(得分:2)
Dalvik将所有线程引用保留在运行时中,以便您的线程将继续运行,除非它被终止或完成(某些reference)。因此,根据您启动线程的位置,您可能会创建多个线程。有no clean way取消线程,在这种情况下,您可能需要首先取消sendDataToServer内的http请求并使用共享标志来停止该线程。
从更大的角度来看,我建议
答案 1 :(得分:1)
它会一直运行直到run()方法完成,这可能是sendDataToServer(“”)完成所花费的时间,因为处理程序应该比网络IO相当快 - 或者线程是强行打断了。
如果用户切换片段,您是否仍然对结果感兴趣?
您是否保留对欢迎片段的引用? (通过片段管理器或活动) - 如果是这样,您仍然可以访问结果。
如果用户返回欢迎片段,则先前的线程引用将丢失。
答案 2 :(得分:0)
线程将一直运行直到MyWelcomeFragment
还活着,如果你没有在onPause()
中杀死它。