我最初有一个Activity
创建一个连接到服务器的thread
,更新自身将更新发送到服务器,然后服务器将更新转发给另一个也在运行应用程序的设备。我遇到了屏幕旋转创建另一个网络thread
的问题。注意:我不能只是锁定屏幕以防止它旋转。
我被指示创建一个运行网络thread
的后台服务(作为替代但不是必须以另一种方式运行)。然后在重建后获取activity
以重新绑定到服务并继续正常运行。
我的问题是如何将activity
的上下文传递给thread
,还可以从我的thread
访问activity
内的变量?我假设有人会说在运行该线程的服务中创建一个class
,并通过一个getter访问class
内的字段。我对服务完全陌生,但是我可以启动它并运行thread
。我只是对如何在活动和线程之间回调和混淆感到困惑。
编辑我收到并错误地说我无法将片段投射到我的班级片段
@Override
protected void onResume(){
FragmentManager manager = getFragmentManager();
myFrag = (NetworkFragment) manager.findFragmentByTag(TAG_NETWORK_FRAGMENT); // here
if (myFrag == null) {
myFrag = new NetworkFragment();
manager.beginTransaction().add(myFrag, TAG_NETWORK_FRAGMENT).commit(); // and it can't resolve this...
}
}
片段
import android.support.v4.app.Fragment;
public class NetworkFragment extends Fragment implements Runnable {
//blahbalh
}
答案 0 :(得分:0)
您可以使用带有setRetainInstance(true)的Fragment来进行网络调用,而不是使用服务。如果主要活动因轮换而被破坏,该片段将继续运行。
在你的活动中,在onResume中,你会检查片段是否在堆栈中(getFragmentManager()。findFragmentByTag())。如果是这样,您将注册一个侦听器以接收对网络呼叫的响应。如果它不在那里(第一次),你实例化它并注册你的听众。
在onPause中,您取消注册您的监听器。
片段将保存网络结果,直到实例化活动并请求网络响应。
有关详细信息,请参阅this。