在我的应用程序初始化期间,我有一个任务需要大约10秒的UI线程,我决定把它放在后台线程中,并显示一个启动画面,而这正在进行..我使用AsyncTask ...但是由于AsyncTasks优先级被硬编码得如此之低,并且无法增加它我能找到的任务,任务从花费10秒钟完成到几分钟.
所以,我的问题是,如何在没有AsyncTask的情况下在NON UI线程上运行任务?到目前为止,我尝试过的所有内容似乎都在UI任务上运行,这会阻止SplashScreen在任务完成之后出现.
那么如何创建一个线程,在非UI线程上运行呢?我假设除了AsyncTask之外必须有一个选项,但到目前为止我还没有找到它......处理程序似乎只是在UI上运行,标准线程/ runnables也是如此.这必须是可能的,但我只是没有搞清楚.
这是我的代码,但理论上它应该每隔一秒发布一次这条日志消息,直到永远,但事实并非如此.有任何想法吗?我的目标是让它永远运行,但是while循环也不起作用.
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
public class Blink extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blink);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
Log.d("AAA", "Test");
}
}, 1000);
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个带有replyComment 类的输入字段,并且有一个事件处理程序将确定是否按下了回车键。
<input class="replyComment" placeholder="Enter Reply" type="text">
$('#replyComment').keyup(function (e) {
alert(e.keyCode);
if (e.keyCode == 13) {
alert('Enter key was pressed.');
}
});
Run Code Online (Sandbox Code Playgroud)
问题是该事件不会触发。问候,
嗨所以我的应用程序中存在相当大的内存泄漏,我认为这是由我的Runnables造成的.这是我使用的Runnables骨架的一个例子:
private Runnable randomAlienFire = new Runnable() {
public void run() {
/*A Bunch
of computations
*/
mainHandler.removeCallbacks(randomAlienFire);
mainHandler.postDelayed(randomAlienFire, number );
}
Run Code Online (Sandbox Code Playgroud)
当我切换活动时,我打电话mainHandler.removeCallbacksAndMessages(null);,thread.randomAlienFire = null;但我仍在泄漏整个活动.所以我的问题是,这个基本骨架中是否存在导致内存泄漏的问题?这可能是处理程序调用自身的事实吗?
我想将事件处理程序转换为jquery样式的单击事件,但它似乎不喜欢传递事件,也许是因为它不再是匿名函数了?
// variables
var faqOne = document.getElementById("faqOne");
var $hiddenOne = $(".faqOneHidden");
// javascript event handler works!
faqOne.addEventListener("click", function(e){
showFaqOne.showClickedFaq(e);
}, false);
// javascript event handle - doesnt work!
$("#faqOne").click(function(){
showFaqOne.showClickedFaq(e);
});
// constructor
function DisplayQFaqs(link, faq){
this.link = link;
this.faq = faq;
}
// method prototype
DisplayQFaqs.prototype.showClickedFaq = function(e){
var el = e.currentTarget;
if(el === this.link) {
this.faq.toggle("slow", function(){
});
}
};
// new DisplayQFaqs Objects
var showFaqOne = new DisplayQFaqs(faqOne,$hiddenOne);
Run Code Online (Sandbox Code Playgroud) new Timer().schedule(new TimerTask() {
public void run() {
KeyBoardUtil.showKeyBoard(et_search);
}
}, 300);
Run Code Online (Sandbox Code Playgroud)
我显示键盘使用 TimerTask,它运行良好。怎么解释呢?
我遵循了这个。我想Activity从Fragment. 我有回按钮toolbar用于Fragment向Activity通信。
这是我的按钮侦听器代码并刷新活动。我将其包含在片段类中:
final Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new Handler().post(new Runnable() {
@Override
public void run()
{
Intent intent = getActivity().getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_NO_ANIMATION);
getActivity().overridePendingTransition(0, 0);
getActivity().finish();
getActivity().overridePendingTransition(0, 0);
startActivity(intent);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它完全重新加载应用程序。在这里可以做什么,以便我可以避免重新加载操作并刷新活动?
这是我的处理函数:
protected static void textChange(object sender,Label labe1, EventArgs e)
{
var text = sender as TextBox;
if (text.Text != "")
labe1.Visible = false;
else
labe1.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
我试着这样做:
this.textBox1.Click += new System.EventHandler(textChange);
Run Code Online (Sandbox Code Playgroud)
对于多个文本框.我已经尝试将两个参数作为对象,然后使用变量将它们解释为函数内部的标签/文本框,我试图在参数声明中相应地使它们都标记/文本框.它的唯一工作方式是通过我只需要一个对象参数2.
当我的应用程序启动时,我得到 exeption '' CMRESHandler 'object has no attribute' _timer '"。当您启动 CMRESHandler 处理程序以将日志发送到 Elasticsearch 时会发生异常。
该问题仅发生在本地开发中,但是当我使用 Docker 运行项目时,不会发生错误。
handler_es = CMRESHandler(
hosts=[{"host": KIBANA_SERVER, "port": 443}],
auth_type=CMRESHandler.AuthType.NO_AUTH,
use_ssl=True,
es_index_name="authenticator_server",
es_additional_fields={"project": "myproject", "environment": ENVIRONMENT},
)
handler_es.setFormatter(formatter)
logger.addHandler(handler_es)
Run Code Online (Sandbox Code Playgroud) 说我有一个像这样的http处理程序:
func ReallyLongFunction(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!")
// run code that takes a long time here
// Executing dd command with cmd.Exec..., etc.
})
Run Code Online (Sandbox Code Playgroud)
如果用户在不运行后续代码的情况下刷新页面或以其他方式取消请求,是否可以中断此功能,我该怎么办?
我尝试这样做:
notify := r.Context().Done()
go func() {
<-notify
println("Client closed the connection")
s.downloadCleanup()
return
}()
Run Code Online (Sandbox Code Playgroud)
但是无论何时我打断之后的代码仍然可以运行。