0

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

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

我只是不明白,

1.为什么Activity的UI每次放到前面都要重新创建?

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

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

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

5.为什么要在“OnPause”期间维护所有的UI变化?为什么android本身不能做同样的事情?(因为当用户离开时它确实具有应用程序的状态,并且当用户回来时我需要返回确切的应用程序状态)并在用户返回应用程序时恢复相同的状态?

我已经做了两年的开发人员,并且是 android 的新手。请对上述问题有所了解。

4

1 回答 1

3

至于 Android活动生命周期,你没有选择改变它的机制。

但是对于您的情况,我给出了一种解决方案:为您的项目实现 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();
    }
}
于 2012-09-05T07:58:47.747 回答