可以访问服务

时间:2016-03-03 02:58:53

标签: android android-activity service

我最初有一个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
}

1 个答案:

答案 0 :(得分:0)

您可以使用带有setRetainInstance(true)的Fragment来进行网络调用,而不是使用服务。如果主要活动因轮换而被破坏,该片段将继续运行。

在你的活动中,在onResume中,你会检查片段是否在堆栈中(getFragmentManager()。findFragmentByTag())。如果是这样,您将注册一个侦听器以接收对网络呼叫的响应。如果它不在那里(第一次),你实例化它并注册你的听众。

在onPause中,您取消注册您的监听器。

片段将保存网络结果,直到实例化活动并请求网络响应。

有关详细信息,请参阅this