1

我创建了一个在 Android 设备上运行的简单 Web 服务器,它基本上响应 Hello World,该服务器在 Preview 11 之前可以正常工作。是否有任何重大更改导致它不再工作或者我做错了什么?应用程序在 context.Response.OutputStream.Write(buffer, 0, buffer.Length) 上崩溃;

代码:

public class Activity1 : Activity
{
    private HttpListener listener;

    protected override void OnCreate( Bundle bundle )
    {
        base.OnCreate( bundle );

        // Set our view from the "main" layout resource
        SetContentView( Resource.Layout.Main );

        // Get our button from the layout resource,
        // and attach an event to it
        var button = FindViewById<Button>( Resource.Id.MyButton );

        button.Click += button_Click;
    }

    private void button_Click( object sender, EventArgs e )
    {
        try
        {
            if ( !HttpListener.IsSupported )
                return;

            listener = new HttpListener();
            listener.Prefixes.Add( "http://+:8001/" );
            listener.Start();
            listener.BeginGetContext( HandleRequest, listener );
        }
        catch ( Exception )
        {
            throw;
        }
    }

    private void HandleRequest( IAsyncResult result )
    {
        HttpListenerContext context = listener.EndGetContext( result );

        string response = "<html>Hello World</html>";
        byte [] buffer = Encoding.UTF8.GetBytes( response );

        context.Response.ContentLength64 = buffer.Length;
        context.Response.OutputStream.Write( buffer, 0, buffer.Length );
        context.Response.OutputStream.Close();

        listener.BeginGetContext( HandleRequest, listener );
    }
}

日志:

I/ActivityManager(112): 进程 torqsoftware.testwebserver (pid 3044) 已经死亡。

I/WindowManager(112): WIN DEATH: Window{44d15120 torqsoftware.testwebserver/monodroidwebservertest.Activity1 paused=false}

D/Zygote (58):进程 3044 由信号 (4) 终止

V/RenderScript_jni(199):表面创建

V/RenderScript_jni(199):surfaceChanged

I/UsageStats(112):com.android.launcher 意外恢复,而已经在 torqsoftware.testwebserver 中恢复

W/InputManagerService(112):得到 RemoteException 向 pid 3044 uid 10062 发送 setActive(false) 通知

谢谢狮子座

4

1 回答 1

3

这似乎与当用户移动到 android 中的另一个应用程序时 Activity “暂停”这一事实有关。在这种情况下,您可能已经打开浏览器来访问在暂停活动中运行的 http 服务器。我建议您将 http 服务器实现为服务而不是活动。

于 2011-03-07T10:14:47.580 回答