我在Android 6.0 API 23智能手机上有一个简单的应用程序。该应用程序附带蓝牙条码扫描仪。蓝牙类有一个异步方法,它传递输入字符串。 这是我的主要活动课程:
using Android.App;
using Android.OS;
using Android.Widget;
namespace TestOnCreate
{
[Activity(Label = "TestOnCreate", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
private Bluetooth bluetooth = null;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
StartBluetooth();
}
private void StartBluetooth()
{
try
{
bluetooth = new Bluetooth(ProcessBluetoothInput);
bluetooth.StartBluetooth("00:19:01:47:0E:70");
}
catch (System.Exception exc)
{
System.Console.WriteLine(exc);
}
}
public void ProcessBluetoothInput(string text)
{
try
{
RunOnUiThread(() =>
{
FindViewById<TextView>(Resource.Id.textView1).Text = text;
});
}
catch (System.Exception exc)
{
System.Console.WriteLine(exc);
}
}
}
}
扫描仪正在运行并将有效信息发送到textView1。 现在,当第二次调用OnCreate()时(如果屏幕旋转或手机处于待机状态),连接将丢失。 ProcessBluetoothInput(字符串文本) 仍然被调用,但RunOnUiThread无效。
我做错了什么? 如果经常调用OnCreate,那么为什么初始化我的可变数据的正确原因是什么?
答案 0 :(得分:1)
您可以阻止因方向更改而重新启动活动。
...通过在ActivityAttribute中设置ConfigurationChanges,应用程序还可以防止在方向更改时重新启动活动,如下所示:
window.addEventListener("load", Loaded);
function Loaded() {
window.addEventListener("resize", Resized);
function Resized() {
var WindowWidth = window.innerWidth;
var WindowHeight = window.innerHeight;
var Span1 = document.getElementById("Span1");
var Span2 = document.getElementById("Span2");
if (WindowWidth <= 800) {
Span1.style.width = .4;
}
if (WindowHeight <= 600) {
Span2.style.height = 1;
}
}
}
示例:
ConfigurationChanges=Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize