我正在开发一个应用程序,我正在使用默认的android Toast
,在使用一段时间后我收到这样的错误:
Package has already posted 50 toasts. Not showing more. Package=com.synapsica
这是我的一些工作代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_opdregistration, container, false);
ButterKnife.bind(this, view);
stopProgressBar(progressBar);
if(mainActivity!=null){
sharedPreferences = mainActivity.getSharedPreferences(Constants.REGISTRATION_SCREEN_SEARCH, Context.MODE_PRIVATE);
}
enterAadharnNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId== EditorInfo.IME_ACTION_DONE){
mainActivity.hideSoftKeyboard(enterAadharnNumber);
if(!enterAadharnNumber.getText().toString().isEmpty()){
if(enterAadharnNumber.getText().toString().length() == 10 || enterAadharnNumber.getText().toString().length() == 12){
progressBar.setVisibility(View.VISIBLE);
if(!enterAadharnNumber.getText().toString().isEmpty()){
if(enterAadharnNumber.getText().toString().length()==10){
Presenter.getInstance().addModel(Constants.SEARCH_PHONE_NUMBER, enterAadharnNumber.getText().toString());
}
}
patientRegistrationActivity.searchPatient(enterAadharnNumber.getText().toString(), "OPD", "search", progressBar);
} else{
Toast.makeText(patientRegistrationActivity, "Enter valid phoneNumber or aadhar Number", Toast.LENGTH_SHORT).show();
}
} else{
Toast.makeText(patientRegistrationActivity, "Enter valid phoneNumber or aadhar Number", Toast.LENGTH_SHORT).show();
}
}
return false;
}
});
return view;
}
答案 0 :(得分:2)
这似乎是系统施加的限制,请看一下:
我建议您使用应用内通知(例如,可以SnackBar)来显示您的消息。
答案 1 :(得分:0)
查看NotificationManagerService
(https://android.googlesource.com/platform/frameworks/base/+/f76a50c/services/java/com/android/server/NotificationManagerService.java)中的代码,看起来Android的吐司入队限制为50.
您应该更新逻辑,而不是经常显示Toast
。您可以使用SnackBar
,但仍然不会太频繁。
try {
ToastRecord record;
int index = indexOfToastLocked(pkg, callback);
// If it's already in the queue, we update it in place, we don't
// move it to the end of the queue.
if (index >= 0) {
record = mToastQueue.get(index);
record.update(duration);
} else {
// Limit the number of toasts that any given package except the android
// package can enqueue. Prevents DOS attacks and deals with leaks.
if (!"android".equals(pkg)) {
int count = 0;
final int N = mToastQueue.size();
for (int i=0; i<N; i++) {
final ToastRecord r = mToastQueue.get(i);
if (r.pkg.equals(pkg)) {
count++;
if (count >= MAX_PACKAGE_NOTIFICATIONS) {
Slog.e(TAG, "Package has already posted " + count
+ " toasts. Not showing more. Package=" + pkg);
return;
}
}
}
}
.......
.......