1

Preview 11 より前に機能していた Hello World で基本的に応答する、Android デバイスで実行される単純な Web サーバーを作成しました。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): surfaceCreated

V/RenderScript_jni(199): surfaceChanged

I/UsageStats( 112): torqsoftware.testwebserver で既に再開されているにもかかわらず、com.android.launcher が予期せず再開されました

W/InputManagerService(112): pid 3044 uid 10062 に setActive(false) 通知を送信する RemoteException を取得しました

ありがとうレオ

4

1 に答える 1

3

ユーザーがAndroidの別のアプリケーションに移動すると、アクティビティが「一時停止」するという事実に関連しているようです。この場合のように、ブラウザを開いて、一時停止したアクティビティで実行されている http サーバーにアクセスした可能性があります。http サーバーをアクティビティとしてではなく、サービスとして実装することをお勧めします。

于 2011-03-07T10:14:47.580 に答える