0

私はアンドロイドが初めてで、誰かがこれを手伝ってくれるかどうか疑問に思っていました。これは私が持っているコードです。

import java.io.*;
import java.net.*;
import android.app.*;
import android.util.Log;
import android.os.*;
import android.view.*;

public class MainActivity extends Activity
  {
  @Override
  public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try
      {
      Socket TestSocket = new Socket("96.29.64.93",2215);
      OutputStream writer = TestSocket.getOutputStream();
      writer.write(new byte[]{1});
      writer.flush();

      InputStream reader = TestSocket.getInputStream();
      byte array[] = new byte[1];
      int i = reader.read(array);
      }catch(IOException ex)
        {
        Log.e("TcpTest","Error",ex);
        }
     }
   }

編集: マニフェスト アプリ強制終了で設定されたインターネット アクセス許可はここで logcat です。 http://i43.tinypic.com/25tc1o7.png

インターネットのアクセス許可を外しても、強制的に閉じられません。

そして、これまでにここに回答を投稿してくれたすべての人に感謝します。

4

2 に答える 2

1

UI スレッドで接続しようとすると、ICS がアプリをクラッシュさせます (UI スレッドで Web サーバーに接続しようとすると、ほぼ確実にアプリが正しく機能しないことが保証されるため)。AsyncTaskまたはを使用して接続していることを確認しますThread


編集:

あなたはいくつかの説明を求めたので、ここに行きます。開発者サイトのAndroid記事から:

アプリケーションが起動されると、システムはアプリケーションの「メイン」と呼ばれるスレッドを作成します。UI スレッドとも呼ばれるメイン スレッドは、イベントの描画など、適切なウィジェットへのイベントのディスパッチを担当するため、非常に重要です。これは、アプリケーションが Android UI ツールキットの実行中のコンポーネントと対話するスレッドでもあります。

たとえば、画面上のボタンをタッチすると、UI スレッドがタッチ イベントをウィジェットにディスパッチし、ウィジェットが押された状態を設定して、無効化リクエストをイベント キューにポストします。UI スレッドはリクエストをデキューし、ウィジェット自体を再描画するように通知します。

このシングル スレッド モデルでは、アプリケーションが適切に実装されていない限り、パフォーマンスが低下する可能性があります。具体的には、すべてが 1 つのスレッドで行われている場合、UI スレッドでネットワーク アクセスやデータベース クエリなどの長い操作を実行すると、ユーザー インターフェイス全体がブロックされます。長い操作の進行中は、描画イベントを含め、イベントをディスパッチできません。ユーザーの観点からは、アプリケーションがハングしているように見えます。さらに悪いことに、UI スレッドが数秒以上 (現在は約 5 秒) ブロックされている場合、ユーザーには悪名高い「アプリケーションが応答していません」(ANR) ダイアログが表示されます。

これは、クライアントとサーバー間のソケット接続を確立しようとすると UI スレッドがブロックされるため、状況に適用されます。接続が確立されるまで、ユーザーは画面とまったく対話できません (これは行われません)。 Android マーケットであまりにも多くの良いレビューを得る:P)。したがって、別のスレッドで潜在的に高価な/長期的な操作を実行することが非常に重要です。これを行う最も簡単な方法は、 を使用することです。これはAsyncTask実装が非常に簡単で、基本的に の概念全体を抽象化するThreadため、心配する必要はありません。

于 2012-04-07T19:02:20.057 に答える