问题:
如何管理(连接,读取,写入,断开)通过配置更改而持续存在的蓝牙连接?
首选使用ActionBarSherlock与设备版本2.2"Froyo"兼容的解决方案.
问题...
既BluetoothDevice不能BluetoothSocket也不能保留onSaveState.
为了保持我的应用程序响应,12秒阻止调用BluetoothSocket.connect()必须在单独的线程上进行.启动a Runnable是线程长任务的推荐方法,但是尝试恢复配置更改是一场噩梦.官方文档指出了三种不同的解决方案.
使用getLastNonConfigurationInstance(),已被弃用(严重?!).
设置android:configChanges="keyboardHidden|orientation"类似于BluetoothChat示例.但是,这并未考虑所有类型的配置更改.
取消并重新启动任务,例如货架示例.在这种情况下,这可能会浪费另外12秒.
更新1
进一步的研究使我得到了asyncTaskLoader,但似乎这只能在完成时更新UI,并且无法提供更新.
BluetoothHDP示例使用服务.服务似乎侧重于进程间通信以及持续超出活动生命周期的需要.我不需要这些功能.
更新2
正如鲁本所指出的,Fragment.setRetainInstance(bool)已经取代了被弃用的getLastNonConfigurationInstance().在这一点上,似乎最好的选择是使用持久的非UI片段setRetainInstance(true).
我正在尝试查找有关Android Application类生命周期的官方文档.显然,对于我在计算器上发现这里和这里的应用类可如果系统需要内存杀害.甚至本教程也是如此.
但很少有事情让我有点恼火:
Application课程可以在低内存中被杀死.Application生命周期的官方图表.Application除了之外,我找不到任何适当的回调来使用onLowMemory().这是否意味着我必须使用此方法来保存我的数据?Application该类在低内存压力下被杀死并且应用程序再次出现在前台,我怎么能知道onCreate()应用程序在系统终止后被重新创建?在一个Activity我会测试savedInstanceState,但据我所知,在Application课堂上没有类似的东西.谢谢你的启发.
这是Android的正确代码:
从中调用initMyApplication.onCreate()
public class Connectivity {
static ConnectivityManager cm;
public static void init(Context context){
cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
}
public static boolean isConnected(){
activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnected();
return isConnected;
}
Run Code Online (Sandbox Code Playgroud)
正在使用staticAndroid的方式?
这些静态值是否会比任何活动或启动的服务(将在一小时内完成)保持更长时间?
有一个相关的问题 Android应用程序类生命周期, 但讨论进入了活动生命周期.