我的应用无法使用旧的三星设备

时间:2017-08-24 08:14:32

标签: java android multithreading operating-system

我有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中 这个错误仍然存​​在。

0 个答案:

没有答案