Android TextWatcher 使用多线程读取 SQL 数据。如何关闭旧线程?
Android TextWatcher read SQL data with multi threading. how close old thread?
我有一个通过创建新线程连接到数据库的功能,因为搜索功能是一项繁重的工作。
textView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(final Editable editable) {
search(textView.getText().toString());
}
});
public void search(String word) {
new Thread(new Runnable() {
@Override
public void run() {
this.wordsList = db.getWordsList(word); //big job
.
.
.
}
}).start();
}
但是当这些代码在短时间内执行多次时,程序会变慢。多次执行上面的代码,程序挂了。
所以我想关闭之前的线程,然后打开新的线程。事实上我不需要以前线程的结果所以我想关闭它们以提高程序速度。
我使用这段代码解决了我的问题:
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() { /* do something */ } });
我有一个通过创建新线程连接到数据库的功能,因为搜索功能是一项繁重的工作。
textView.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(final Editable editable) {
search(textView.getText().toString());
}
});
public void search(String word) {
new Thread(new Runnable() {
@Override
public void run() {
this.wordsList = db.getWordsList(word); //big job
.
.
.
}
}).start();
}
但是当这些代码在短时间内执行多次时,程序会变慢。多次执行上面的代码,程序挂了。
所以我想关闭之前的线程,然后打开新的线程。事实上我不需要以前线程的结果所以我想关闭它们以提高程序速度。
我使用这段代码解决了我的问题:
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() { /* do something */ } });