如何停止在Java中重复我自己
在JavaScript中,我不止一次使用回调方法,因为JavaScript是一种异步语言 例如:如何停止在Java中重复我自己,java,android,Java,Android,在JavaScript中,我不止一次使用回调方法,因为JavaScript是一种异步语言 例如: function missionOne () { sumCalculation(1, 2, function (result) { console.log(result) // writes 3 }) } function sumCalculation (param1, param2, callback) { let result = param1 + par
function missionOne () {
sumCalculation(1, 2, function (result) {
console.log(result) // writes 3
})
}
function sumCalculation (param1, param2, callback) {
let result = param1 + param2
// The things that take long time can be done here
callback(result)
}
我想知道是否有什么方法可以阻止我使用Java
编辑:我删除了几个使问题更复杂的句子。是的,用Java很容易。以上面的示例为例,您可以用Java编写它,如下所示:
public static void main(String[] args) {
System.out.println(sumCalc(1,2));
}
private int sumCalc(int first, int second) {
return first + second;
}
我可能对你的问题读得太多了,但你似乎在研究如何在Android中处理异步代码。有几个本机选项(不考虑任何库)。我将重点讨论两个,但请记住还有其他选择 异步任务 从 AsyncTask允许正确且轻松地使用UI线程。此类允许您在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序 在编写之前,您需要知道它将接收哪种类型的参数,它将在计算期间发布的进度类型,以及它的返回类型。这些类型是通过
AsyncTask
通用参数AsyncTask
定义的。如果您不需要它们中的任何一个,请将它们设置为Void
下面是使用AsyncTask
计算两个整数之和的基本要点:
public void sumCalculation (int param1, int param2, Callback callback) {
new AsyncTask<Integer, Void, Integer>() {
@Override
public Integer doInBackground(Integer... params) {
int result = 0;
for (Integer param : params) {
result += param;
}
return result;
}
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
callback.onDone(integer);
}
}.execute(param1, param2);
}
如您所见,这需要解析inputMessage.what
并决定如何处理它。此外,您需要将inputMessage.obj
转换为正确的类型,以此类推
这仅仅是两个例子,但根据您试图做什么,您可能需要深入研究服务
,或者查看一些反应式方法,例如RxJava2
。然而,我鼓励你在深入研究更复杂的问题之前先从基础开始。我真的不明白你的问题是什么。它是关于从异步任务中获得结果的吗?或者如何组织代码?你能提供一些你想改进的代码示例吗?你正在为Android编写应用程序吗?因为AsyncTask不是Java SDK的一部分,它是特定于Android SDK的。在我看来它不像Java…@efkan你能确切地说明你想要完成什么,所以我们可以为你提供一个可能更好的解决方案。如果我在sumCalc中进行密集操作,如果我在方法中使用它,它工作正常吗?我猜这段代码不是拯救我避免重复我自己的正确方法。我们可以将它转换为“sync”方法吗?如果我将sumCalc方法声明为“synchronized”,那么当我从另一个方法调用它时,它是否同步工作?重复自己的想法、“异步代码”和“synchronized”方法是三个截然不同的概念。我想你有很多关于java的知识需要学习,在问太多问题之前阅读更多关于java的知识会对你有好处。我有一个问题,关于野餐,你介意吗@埃德森
public class MyHandler {
@Override
public void handleMessage(Message inputMessage) {
int messageType = inputMessage.what;
Object extraData = inputMessage.obj;
...
}
}
public class MyTask extends Thread {
public static public int COMPUTATION_DONE = 0;
private MyHandler handler;
public MyTask(MyHandler handler) {
this.handler = handler;
}
@Override
public void run() {
//do your computation
Message message = handler.obtainMessage(COMPUTATION_DONE, your_result);
handler.sendMessage(message);
}
}