我刚开始学习android,我正在开发一个应用程序,它使用套接字连接与PC上运行的服务器。我成功建立连接并能够在客户端和服务器之间进行通信,直到“主页”按钮获得按下或者是否有任何OnConfigChange事件。
我在应用程序中有一个活动,其中有一个按钮(例如“连接”)。当它被按下时,电话与服务器建立连接(所有套接字编码都在非ui线程中完成),并且我在成功连接时将TextView(说“状态”)更改为“已连接”。因此,当手机旋转或按下主页按钮时,应用程序将被隐藏。当我回到我的应用程序时,活动从初始阶段开始。在上一个会话期间创建的所有对象都将被销毁并丢失套接字连接。
我只是不明白,
1.为什么活动用户界面每次被带到前面时都会重新创建?
2.为什么android只能保存活动的状态,直到用户真正要退出(按后退按钮)?
3.为什么android不能像Windows一样最小化应用程序并返回用户离开的最后状态(这样我拥有所有对象)?
4.我已经在非ui线程中完成了所有套接字操作,并且一旦用户离开,通过按下主页按钮(没有按下)就关闭了这个套接字连接。如果是这样,那么我应该如何保存我使用的套接字对象在最后一个实例中的线程?
5.为什么我们应该在“OnPause”期间保持所有UI更改?为什么不能自己做同样的事情?(因为当用户离开时它确实有应用程序的状态,当用户回来时我需要确切的应用程序状态)并在用户回到应用程序时返回相同的状态? / p>
我是开发人员已经两年了,也是android的新手。请详细说明上述问题。
答案 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();
}
}