将微调器值保存到文件时会发生这种情况。我用线程来减少它的工作。但它仍然不起作用..请帮助我...
public void select(View view)
{
final Spinner s = (Spinner) findViewById(R.id.spinner1);
final String FILENAME = "Username";
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
s.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_APPEND);
user = s.getSelectedItem().toString();
fos.write(user.getBytes());
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});
}
});
}
答案 0 :(得分:1)
当您在主线程上执行一些繁重的进程(内存访问)时,这是系统显示的消息,以避免此消息需要使用AsyncTask。
参考:http://developer.android.com/reference/android/os/AsyncTask.html
AsyncTask的文档附带了一个很好的解释示例,说明如何有效地使用它来从中获益最多。
请记住,如果您使用模拟器,那么系统正在跳帧的这些消息就不是问题了。它实际上很常见。请记住,在使用模拟器时,应用程序不应跳过超过100帧。
答案 1 :(得分:1)
忘记创建单独的线程,让AsyncTask为你做这件事。
s.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground( final Void ... params ) {
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_APPEND);
user = s.getSelectedItem().toString();
fos.write(user.getBytes());
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute( final Void result ) {
}
}.execute();
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});