如何在另一个线程中运行套接字代码?

问题描述 投票:0回答:1

在我的应用程序中我有适配器,在这个适配器中我应该调用socket。 我想在另一个线程中调用套接字而不是在MainThread中调用。 我编写套接字代码,但我不知道如何在另一个线程中调用它。

我的套接字代码:

mSocket.on("finish", new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        try {
            Constants.currentActivity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.e("socketLogs", args[0] + "");
                    try {
                        startTimer();
                        final FinishResponse finishResponse = new Gson().fromJson(args[0].toString(), FinishResponse.class);
                        countDownerLayout.setVisibility(View.GONE);
                        winnerLay.setVisibility(View.VISIBLE);
                        bidCount.setVisibility(View.GONE);
                        offerCount.setVisibility(View.GONE);
                        price.setVisibility(View.GONE);
                        timeView.setVisibility(View.GONE);
                        userPic.setVisibility(View.GONE);
                        winnerLay.setBackgroundColor(ContextCompat.getColor(context, R.color.white));
                        //if (finishResponse.getRes().getWinnerAvatar() != null && !finishResponse.getRes().getWinnerAvatar().equals("")) {
                            Glide.with(context)
                                    .load(Constants.SERVER + finishResponse.getRes().getWinnerAvatar())
                                    .placeholder(R.mipmap.ic_launcher)
                                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                                    .into(User);
                       /* } else {
                            User.setImageDrawable(ContextCompat.getDrawable(context, R.mipmap.ic_launcher_round));
                        }*/
                        edtUserName.setText(finishResponse.getRes().getWinnerName());
                        edtUserName.setTextColor(ContextCompat.getColor(context, R.color.black));
                        txtStartPrice.setText("Sell");
                        txtStartPrice.setBackgroundColor(ContextCompat.getColor(context, R.color.TextColorGreen));
                        txtStartPrice.setTextColor(ContextCompat.getColor(context, R.color.white));
                        try {
                            String[] splitDate = finishResponse.getRes().getEnd().split(" ");
                            String[] dateSpliet = splitDate[0].split("-");
                            TimeUtils timeUtils = new TimeUtils(Integer.parseInt(dateSpliet[0]), Integer.parseInt(dateSpliet[1]), Integer.parseInt(dateSpliet[2]));
                            txtPrice.setText(splitDate[1] + "  " + timeUtils.getIranianDate());
                        } catch (Exception e) {
                        }
                    } catch (JsonSyntaxException e) {
                    }
                }
            });
        } catch (Exception e) {

        }
    }
});

我在适配器的getView方法中编写上面的代码。 但我想在另一个线程中编写上面的代码,而不是在MainThread中运行。

我该怎么做?

java android multithreading sockets
1个回答
0
投票

只需为此创建新的线程

Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // do stuff
            }
};
new Thread(runnable).start();

我会就你的代码给出一些建议。首先,在getView中调用适配器中的Socket是不好的。您应该在片段或Activity中调用它(如果您不使用MVP或其他架构)。

下一个大问题是你有当前活动保存在常量中

Constants.currentActivity

它会导致内存泄漏,即使你关闭它也会活动,你的应用程序会遇到很多问题。

© www.soinside.com 2019 - 2024. All rights reserved.