Android:为什么我们必须在每次活动开始时创建UI?

时间:2012-09-05 07:07:23

标签: android android-layout android-activity

我刚开始学习android,我正在开发一个应用程序,它使用套接字连接与PC上运行的服务器。我成功建立连接并能够在客户端和服务器之间进行通信,直到“主页”按钮获得按下或者是否有任何OnConfigChange事件。

我在应用程序中有一个活动,其中有一个按钮(例如“连接”)。当它被按下时,电话与服务器建立连接(所有套接字编码都在非ui线程中完成),并且我在成功连接时将TextView(说“状态”)更改为“已连接”。因此,当手机旋转或按下主页按钮时,应用程序将被隐藏。当我回到我的应用程序时,活动从初始阶段开始。在上一个会话期间创建的所有对象都将被销毁并丢失套接字连接。

我只是不明白,

1.为什么活动用户界面每次被带到前面时都会重新创建?

2.为什么android只能保存活动的状态,直到用户真正要退出(按后退按钮)?

3.为什么android不能像Windows一样最小化应用程序并返回用户离开的最后状态(这样我拥有所有对象)?

4.我已经在非ui线程中完成了所有套接字操作,并且一旦用户离开,通过按下主页按钮(没有按下)就关闭了这个套接字连接。如果是这样,那么我应该如何保存我使用的套接字对象在最后一个实例中的线程?

5.为什么我们应该在“OnPause”期间保持所有UI更改?为什么不能自己做同样的事情?(因为当用户离开时它确实有应用程序的状态,当用户回来时我需要确切的应用程序状态)并在用户回到应用程序时返回相同的状态? / p>

我是开发人员已经两年了,也是android的新手。请详细说明上述问题。

1 个答案:

答案 0 :(得分:3)

对于Android activity lifecycle,您无权更改其机制。

但是对于你的情况,我给出了一个解决方案:为你的项目实现Android应用程序。

创建一个包含主要活动的新整体应用程序:

public class ApplicationGlobalAgent extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        MyNetwork.StartAndConnect();
    }

    @Override
    public void onTerminate()
    {
        MyNetwork.Finsish();
        super.onTerminate();
    }

    @Override
    public void onLowMemory()
    {
        //clear unused memory here
        System.gc();        
        super.onLowMemory();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        //handle any change when app is hidden, shown, restarted...
        super.onConfigurationChanged(newConfig);
    }   
}

Manifiest.xml

<application 
    android:name=".ApplicationGlobalAgent"
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" >

    <activity
        android:name=".MainActivity"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
<application>

因此,您可以通过活动更改和操作维护您的网络。从应用程序中的活动中,您可以获得应用程序的成员:

public class MainActivity extends Activity
{
    @Override
    protected void onCreate(Bundle pSavedInstanceState)
    {
        super.onCreate(pSavedInstanceState);

        //Access app members
        ApplicationGlobalAgent app = (ApplicationGlobalAgent)getApplication();
        app.GetMyNetwork().doDataTransport();
    }
}