在我的应用程序中,我有适配器,在此适配器中,我应该调用 socket 。
我希望在另一个主题中调用套接字,而不是在 MainThread
中调用。
我写了 socket 代码,但我不知道如何在另一个帖子中调用它。
我的套接字代码:
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中运行。
我该怎么做?
答案 0 :(得分:0)
只需为此创建新线程
Runnable runnable = new Runnable() {
@Override
public void run() {
// do stuff
}
};
new Thread(runnable).start();
我会就您的代码提出一些建议。首先,在 getView 中调用适配器中的Socket是不好的。您应该在片段或活动中调用它(如果您不使用MVP或其他架构)。
下一个大问题是你有当前活动保存在常量
中Constants.currentActivity
它会导致内存泄漏,即使你关闭它也会活动,你的应用程序会遇到很多问题。