【问题标题】:Launch timeout has expired启动超时已过期
【发布时间】:2012-04-07 07:55:37
【问题描述】:

我正在创建一个客户端服务器应用程序,其中 android 应用程序用作服务器。客户端代码是用java编写的。我想要做的是在android应用程序的后台持续监听连接,而用户可以继续在应用程序中做其他事情。

部分java客户端代码是

    Socket socket1 = null;
    DataOutputStream dataOutputStream = null;
    DataInputStream dataInputStream = null;
    socket1 = new Socket(GlobalState.waiterip, 8888);
    dataOutputStream = new DataOutputStream(socket1.getOutputStream());
    dataInputStream = new DataInputStream(socket1.getInputStream());
    dataOutputStream.writeUTF("1");

android活动代码是

Button tabstatus,menu,logout,inbox;
public void onCreate(Bundle savedInstanceState)
    {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.waiterhome);
       tabstatus=(Button)findViewById(R.id.tabstatus);
       menu=(Button)findViewById(R.id.menu);
       logout=(Button)findViewById(R.id.logout);
       inbox=(Button)findViewById(R.id.inbox);
       Intent myIntent = new     Intent(getApplicationContext(),WaiterService.class);
       startService(myIntent);
       tabstatus.setOnClickListener(new OnClickListener() 
       {
    public void onClick(View v) 
    {
               //some code          }
    });
       menu.setOnClickListener(new OnClickListener()
       {
    public void onClick(View v)
    {
                //some code
    }
    });
       logout.setOnClickListener(new OnClickListener() 
       {
    public void onClick(View v) 
    {
        //some code
    });
       inbox.setOnClickListener(new OnClickListener()
       {
    public void onClick(View v)
    {
        //some code
    }
    });
       }
     }

我正在启动的 android 服务的代码,即 WaiterService 是

   public class WaiterService extends Service
   {
   public IBinder onBind(Intent intent) 
   {
      return null;
   }
   public void onCreate()
   {
        ServerSocket serverSocket = null;
            Socket socket = null;
    DataInputStream dataInputStream = null;
    DataOutputStream dataOutputStream = null;
    try
    {
      serverSocket = new ServerSocket(8888);
      while(true)
      {
        socket = serverSocket.accept();
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            int op=Integer.parseInt(dataInputStream.readUTF());
            switch(op)
            {
            case 1://some code
                               break;
            }
    }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
 }
  }

我还在 manifest.xml 文件中包含了服务描述

当我运行这段代码时,我在 logcat 中得到如下错误

 04-07 12:23:53.393: W/ActivityManager(51): Launch timeout has expired,   giving up wake lock!
 04-07 12:23:53.399: W/ActivityManager(51): Activity idle timeout for HistoryRecord{44e00278 aac.imenu.MyDroidClient/.WaiterActivity}
 04-07 12:24:03.510: W/ActivityManager(51): Timeout executing service: ServiceRecord{44dde9b0 aac.imenu.MyDroidClient/.WaiterService}

模拟器屏幕变黑,没有显示活动的 gui。也没有发生套接字通信。

我不知道问题到底出在哪里,请指导我如何解决这个问题。或者有没有其他方法可以在后台连续监听套接字。

【问题讨论】:

    标签: android sockets


    【解决方案1】:

    我认为您可以忽略此错误,因为这可能不是问题的原因。

    查看问题here

    【讨论】:

    • 那么可能是什么问题?因为在这个问题没有解决之前,我无法继续前进。
    【解决方案2】:

    可能的原因是您的服务器套接字阻塞了主线程。尝试将服务器套接字监听放在单独的进程中。

    【讨论】:

    • 把它放在一个单独的进程中到底是什么意思??
    • 组件可以通过 android:process 属性在单独的进程中运行。然而,再想一想,似乎在单独的线程中运行它可能会达到目的。
    • 尝试了各种线程组合,但仍然没有成功!还尝试了异步任务。请给我一个解决方案。
    猜你喜欢
    • 2011-03-29
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2015-09-15
    相关资源
    最近更新 更多