我正在Xamarin中制作Android应用程序。该应用程序具有在后台运行的TCP侦听器。因此,当应用程序未打开时,此侦听程序仍处于活动状态,我已将它移动到作为服务运行。不幸的是,当开始时UI变得没有响应,并且崩溃而没有在调试器中抛出任何错误。C#Android服务崩溃没有错误
从一个活动一个新的线程启动服务:
btnStart.Click += (object sender, EventArgs e) =>
{
Thread listener = new Thread (() =>
{
StartService(new Intent(this, typeof(MyService)));
});
listener.Start();
};
这里是从服务代码:
public override void OnStart(Android.Content.Intent intent, int startId)
{
base.OnStart (intent, startId);
Log.Debug ("Service Class", "Service has started");
DoActions();
}
public void DoActions()
{
Log.Debug("Service Class", "getting local IP!");
IPHostEntry host;
string localIP = "";
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
localIP = ip.ToString();
break;
}
}
int port = 1111;
IPAddress localaddr = IPAddress.Parse (localIP);
TcpListener tcpListener = new TcpListener (localaddr, port);
Log.Debug ("Service Class", "accepted local IP, starting listener");
tcpListener.Start();
Log.Debug ("Service Class", "You are now listening on " + localaddr + port);
while (true)
{
Socket socket = tcpListener.AcceptSocket();
byte[] array = new byte[1024];
socket.Receive (array);
string @string = Encoding.UTF8.GetString (array);
Log.Debug ("Service Class", "Message Received From Server:" + (@string.Replace ("\0", string.Empty)));
}
}
我起床到“你现在监听” + localaddr + port“调试信息,在这种情况下,它是192.168.0.105端口1111.我有一个计时器写入调试x秒,在应用程序崩溃之前我会得到一些响应。用于将其作为来自同一活动的任务运行。
有没有一种方法可以将更多信息发送给调试器,以查明哪里出了问题? 我在4.2.2上使用Tronsmart mk908b进行测试
在此先感谢!
更新: 看来这可能与Android服务生命周期有关。仍在寻找解决这个问题的方法。
请发布您的logcat。 – BeingMIAkashs
http://pastebin.com/di7V7AMM – user1672867
信息(364)/ InputDispatcher:应用程序没有响应:窗口{413e3dd0 u0 SecureX2.SecureX2/securex2.ListenActivity}。事件发生后5002.8ms,等待开始后5002.3ms。原因:正在等待,因为所触摸的窗口尚未处理之前传送给它的输入事件。 – user1672867