我有8个智能手机可供开发; HTC M7,LG g3 / s,LG g4,三星Galaxy S6,三星G Tab S1,三星Galaxy S8,三星Galaxy S7。我在性能或加载问题和回答问题方面没有任何问题。
一些测试人员告诉我他们的设备无法正常工作。有趣的是,这些设备只是旧的三星设备,每一个。
完成考试后,一个线程正在运行,它正在更新SQL DB并将考试设置为“已完成”; 0到1.这没有发生。
我的应用程序的目标是4.0版本,最新版本。而旧的HTC M7没有这样的问题,它需要大约5 sek来处理线程,但它工作得很好。
问题:Samsung是否处理与(或多或少)本机不同的线程 Android,像HTC / LG的?三星是否会停止线程,让我们说3 Sek之后,不像其他任何运行到异常或完成的机器人?
如果它不像我预期的那样,还有什么呢? Ram的用法是上限?存储?或者我必须添加:
if(androidversion < 5.0){safe in foreground instead, don´t use thread;} //i know that this is not working.
这是Thread的代码:
public class PruefungKorrekturThread extends AsyncTask<String, Void, String> {
ProgressDialog progressDialog4 ;
Context context ;
HpMobileSQLiteDB mobile ;
String id ;
List<tabelleUebungsfragen> mFrageList;
int richtig = 0 ;
public PruefungKorrekturThread(String id ,List<tabelleUebungsfragen> mFrageList , Context context) {
this.context = context ;
this.id = id ;
this.mFrageList = mFrageList ;
}
@Override
protected String doInBackground(String... params) {
mobile= new HpMobileSQLiteDB(context) ;
long millis = new java.util.Date().getTime();
mobile.updateNullRichtig(id) ;
mobile.updateNullKorrigiert(id);
mobile.updateUebungBeendetByID(id,String.valueOf(millis));
richtig = mobile.getUebungErgebnisse(Integer.valueOf(id)) ;
return "Executed";
}
@Override
protected void onPostExecute(String result) {
if (progressDialog4.isShowing()){progressDialog4.dismiss();}
final Dialog dialog = new Dialog(context);
dialog.getWindow().setBackgroundDrawableResource(R.drawable.dialog_box);
dialog.setContentView(R.layout.popup_pruefung_abgeben);
dialog.setCancelable(true);
dialog.show();
Button ja = (Button) dialog.findViewById(R.id.ja);
TextView uebrig = (TextView) dialog.findViewById(R.id.uebrig) ;
TextView abgeben = (TextView) dialog.findViewById(R.id.pruefung_abgeben) ;
abgeben.setText(context.getString(R.string.ierg));
Button redirect = (Button) dialog.findViewById(R.id.redirect);
redirect.setVisibility(View.VISIBLE);
redirect.setText(context.getString(R.string.zpl));
redirect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent s = new Intent(context,Pruefungen.class) ;
context.startActivity(s);
}
});
Button nein = (Button) dialog.findViewById(R.id.nein);
if (richtig>=45) {
uebrig.setText(context.getString(R.string.dynstring9,richtig,mFrageList.size()));
uebrig.setTextColor(Color.GREEN);
mobile.updateUebungBestanden(id) ;
} else {
uebrig.setText(context.getString(R.string.dynstring10,richtig,mFrageList.size()));
uebrig.setTextColor(Color.RED);
}
ja.setText(context.getString(R.string.zK));
dialog.setCancelable(false);
ja.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
Intent s = new Intent(context, Pruefungen_view_pager.class);
s.putExtra("is", "thema");
s.putExtra("idsT",""+id) ;
s.putExtra("thema_name","") ;
s.putExtra("from","pruefungen") ;
s.putExtra("themen_ergebnisse",""+"true") ;
s.putExtra("erg_type","thema") ;
context.startActivity(s);
}
});
nein.setText(context.getString(R.string.zSs));
nein.setBackgroundResource(R.drawable.background_neutral);
nein.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
Intent s = new Intent(context,Homescreen.class) ;
context.startActivity(s);
}
});
}
@Override
protected void onPreExecute() {
mobile = new HpMobileSQLiteDB(context) ;
progressDialog4 = new ProgressDialog(context,R.style.AppTheme_Dark_Dialog);
if (progressDialog4.isShowing()){progressDialog4.dismiss();}
progressDialog4.setIndeterminate(true);
progressDialog4.setCancelable(false);
progressDialog4.setCanceledOnTouchOutside(false);
progressDialog4.setMessage(context.getString(R.string.progress));
progressDialog4.show();
}
@Override
protected void onProgressUpdate(Void... values) {}
}
当计时器为onfinish()
countDown = new CountDownTimer(Integer.valueOf(mobile.getUebungZeit(Integer.valueOf(topic))), 100) {
@Override
public void onTick(long millisUntilFinished) {
currentDowntimer = millisUntilFinished;
if( type.equals("pruefungen")) {
long totals = (millisUntilFinished / 100) / 10;
long minutes = totals / 60;
long sek = totals % 60;
long min = minutes % 60;
long h = minutes / 60;
String timerString = String.format("%1$02d:%2$02d:%3$02d", h, min, sek);
timer.setText(timerString);
}
}
@Override
public void onFinish() {
if( type.equals("pruefungen")) {
PruefungKorrekturThread ii = new PruefungKorrekturThread(topic, mFrageList, Pruefungen_view_pager.this);
ii.execute();
}
countDown.cancel();
countisrunning = false;
}
};
当你在回答所有问题后完成并且还剩下时间
ja.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
countDown.onFinish();
}
});
编辑*:
我的公司组织了一个S3,我现在遇到了问题!
三星与Multiuserpermissions有不同的态度。至少到Android 4.2!在4.3他们做了一个修补程序,这是一个小更新。这就是为什么包括我在内的一些ppl可以在出厂重置S3上使用该应用程序而没有任何问题,但升级4.0-4.3到4.3的旧设备存在多用途的问题:
08-28 08:45:02.430 2345-2679/? E/DatabaseUtils: Writing exception to parcel
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
at android.os.Binder.execTransact(Binder.java:388)
at dalvik.system.NativeStart.run(Native Method)
即使我在Manifest中添加了这两行:
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
和
android:protectionLevel="signature"
和
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
在proguard-rules.pro中 这个错误仍然存在。