Android:从线程调用活动

时间:2010-11-28 01:34:54

标签: android multithreading android-activity android-intent

我的问题可能在同一时间变得简单和尴尬,但我有点卡住了。

我有一个Main.java类,它扩展了Activity。

在该课程中,我执行以下操作:

ringerServer = new Thread(new RingerServer());
ringerServer.start();

我想要做的是让RingerServer线程不断运行。

在该线程中,我监听TCP连接。如果我得到一个,我会启动另一个类,它发送和接收UDP数据包。

public class RingerServer implements Runnable {

    public static final int SERVERPORT = 4445; // Default port to connect to

    @Override
    public void run() {
        try {
            // Create a socket for handling incoming requests
            ServerSocket server = new ServerSocket(SERVERPORT);

            while (!VoIPCall.onCall) {
                // Wait for an incoming connection
                Socket clientSocket = server.accept();

                // TODO: Display a message for the user to accept or decline

                // For now, automatically accept the call
                Intent myIntent = new Intent(null, VoIPCall.class);
                // Put the IP as a parameter
                myIntent.putExtra("inetAddress", clientSocket.getInetAddress());
                startActivity(myIntent);
            }

        } catch (IOException e) {
            Log.e("TCP", "S: Error", e);
        }
    }
}

我的问题与这些行有关:

Intent myIntent = new Intent(null, VoIPCall.class);
myIntent.putExtra("inetAddress", clientSocket.getInetAddress());
startActivity(myIntent);

这些行在Activity中可以正常工作,但它不会抱怨,因为它是一个Thread,它不知道Activity类,因为它不会扩展它,而是实现Runnable。

我不知道如何让我的程序继续运行RingerServer,但让主线程转到VoIPCall类。有什么想法吗?

我非常感谢你的帮助。

非常感谢,

Jary

1 个答案:

答案 0 :(得分:1)

您应该将线程移动到Service而不是活动。我建议您首先阅读Android Dev Guide的Processes and Threads部分。然后查看Service的API文档,这将帮助您开始创建一个。