├── .gitignore ├── LICENSE ├── README.md ├── android.keystore ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── urbandroid │ │ └── dontkillmyapp │ │ ├── MainActivity.kt │ │ ├── RateActivity.kt │ │ ├── RestartReceiver.kt │ │ ├── ResultActivity.kt │ │ ├── common.kt │ │ ├── domain │ │ └── Benchmark.kt │ │ ├── gui │ │ ├── BenchmarkView.kt │ │ └── FloatingMaterialButtonBehavior.java │ │ └── service │ │ └── BenchmarkService.kt │ └── res │ ├── drawable-hdpi │ ├── ic_alarm.png │ ├── ic_main.png │ └── ic_work.png │ ├── drawable-mdpi │ ├── ic_alarm.png │ ├── ic_main.png │ └── ic_work.png │ ├── drawable-nodpi │ └── rate.png │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable-xhdpi │ ├── ic_alarm.png │ ├── ic_main.png │ └── ic_work.png │ ├── drawable-xxhdpi │ ├── ic_alarm.png │ ├── ic_main.png │ └── ic_work.png │ ├── drawable │ ├── ic_delete_24.xml │ ├── ic_dkma.xml │ ├── ic_info_24.xml │ ├── ic_play_circle_24.xml │ ├── ic_share_24.xml │ └── logo.xml │ ├── layout-v21 │ └── view_report.xml │ ├── layout │ ├── activity_main.xml │ ├── activity_rate.xml │ ├── activity_result.xml │ ├── dialog_item.xml │ ├── view_fab.xml │ ├── view_report.xml │ └── view_toolbar.xml │ ├── menu │ ├── menu_main.xml │ └── menu_result.xml │ ├── mipmap-anydpi-v26 │ └── ic_launcher.xml │ ├── mipmap-anydpi-v31 │ └── ic_launcher.xml │ ├── mipmap-hdpi │ ├── ic_foreground.png │ └── ic_launcher.png │ ├── mipmap-mdpi │ ├── ic_foreground.png │ └── ic_launcher.png │ ├── mipmap-xhdpi │ ├── ic_foreground.png │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ ├── ic_foreground.png │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ ├── ic_foreground.png │ └── ic_launcher.png │ ├── values-cs │ └── strings.xml │ ├── values-da │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-fa │ └── strings.xml │ ├── values-fil │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-id │ └── strings.xml │ ├── values-in │ └── strings.xml │ ├── values-it │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-night-v31 │ └── colors.xml │ ├── values-night │ ├── colors.xml │ └── styles.xml │ ├── values-nl │ └── strings.xml │ ├── values-pl │ └── strings.xml │ ├── values-pt-rBR │ └── strings.xml │ ├── values-pt │ └── strings.xml │ ├── values-ro │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-tr │ └── strings.xml │ ├── values-uz │ └── strings.xml │ ├── values-v31 │ └── colors.xml │ ├── values-vi │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ ├── values-zh │ └── strings.xml │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── fastlane └── metadata │ └── android │ └── en-US │ ├── full_description.txt │ ├── images │ ├── featureGraphic.png │ ├── icon.png │ └── phoneScreenshots │ │ ├── 01.png │ │ ├── 02.png │ │ ├── 03.png │ │ ├── 04.png │ │ ├── 05.png │ │ ├── 06.png │ │ └── 07.png │ ├── short_description.txt │ ├── title.txt │ └── video.txt ├── gradle.properties ├── ressrc └── store-listing │ ├── ss-template.svg │ ├── ss1.png │ ├── ss2.png │ ├── ss3.png │ ├── ss4.png │ └── ss5.png └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | .gradle 2 | .idea 3 | build 4 | gradle/wrapper 5 | gradlew 6 | gradlew.bat 7 | local.properties 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DontKillMyApp 2 | 3 | Helps you set up your phone background tasks so that your apps can finally work for YOU even when not looking at the screen right now. See how is your phone doing and test different settings with DontKillMyApp benchmark. 4 | 5 | [Get it on F-Droid](https://f-droid.org/packages/com.urbandroid.dontkillmyapp/) 8 | [Get it on Google Play](https://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp) 11 | 12 | ## Features: 13 | * DKMA benchmark: Measure how aggressively is your phone killing background apps 14 | * Guides: Get actionable steps to overcome most background process restrictions 15 | * Make a change:️ Help smartphones stay smart by sharing your benchmark report to dontkillmyapp.com 16 | 17 | DontKillMyApp is a tool for benchmarking nonstandard background processing limitations that are done by OEMs on different Android flavours. You can measure before setting up your phone, then go through the setup guides and benchmark again to see how much has your phone been slacking in the background. 18 | 19 | You can share your report through the app to the maintainers of the dontkillmyapp.com website who compile it and base the overall negative score on it. 20 | 21 | ## How does the benchmark work? 22 | 23 | The app starts a foreground service with a wake lock and schedules repetitive task on the main thread, a custom thread executor and schedules regular alarms (AlarmManager.setExactAndAllowWhileIdle). Then it calculates executed vs. expected. That's it! 24 | -------------------------------------------------------------------------------- /android.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/android.keystore -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | android.keystore 2 | gradle.properties 3 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | 5 | android { 6 | compileSdk 33 7 | 8 | namespace "com.urbandroid.dontkillmyapp" 9 | 10 | defaultConfig { 11 | minSdkVersion 24 12 | targetSdkVersion 33 13 | versionCode 35 14 | versionName "2.6" 15 | 16 | multiDexEnabled true 17 | 18 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 19 | } 20 | 21 | signingConfigs { 22 | release { 23 | storeFile file("android.keystore") 24 | storePassword projectKeystorePassword 25 | keyAlias projectKeystoreAlias 26 | keyPassword projectKeystorePassword 27 | } 28 | } 29 | 30 | buildTypes { 31 | release { 32 | minifyEnabled true 33 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 34 | signingConfig signingConfigs.release 35 | } 36 | } 37 | namespace 'com.urbandroid.dontkillmyapp' 38 | } 39 | 40 | dependencies { 41 | implementation fileTree(dir: "libs", include: ["*.jar"]) 42 | implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" 43 | implementation 'androidx.core:core-ktx:1.7.0' 44 | implementation 'androidx.appcompat:appcompat:1.4.1' 45 | implementation 'androidx.constraintlayout:constraintlayout:2.1.3' 46 | testImplementation 'junit:junit:4.13.2' 47 | androidTestImplementation 'androidx.test.ext:junit:1.1.3' 48 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' 49 | 50 | implementation 'com.google.android.material:material:1.5.0' 51 | 52 | implementation 'com.google.android.play:core:1.10.3' 53 | 54 | implementation 'androidx.multidex:multidex:2.0.1' 55 | 56 | def preference_version = "1.1.1" 57 | 58 | // Java language implementation 59 | implementation "androidx.preference:preference:$preference_version" 60 | // Kotlin 61 | implementation "androidx.preference:preference-ktx:$preference_version" 62 | implementation 'com.google.code.gson:gson:2.8.6' 63 | 64 | dependencies { 65 | implementation('dev.doubledot.doki:library:0.0.1@aar') { 66 | transitive = true 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | -dontobfuscate 16 | 17 | # Uncomment this to preserve the line number information for 18 | # debugging stack traces. 19 | -keepattributes SourceFile,LineNumberTable 20 | 21 | # If you keep the line number information, uncomment this to 22 | # hide the original source file name. 23 | #-renamesourcefileattribute SourceFile 24 | 25 | -keepnames class com.urbandroid.dontkillmyapp.* 26 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp 2 | 3 | import android.Manifest.permission 4 | import android.app.AlarmManager 5 | import android.content.Context 6 | import android.content.Intent 7 | import android.content.res.Resources.getSystem 8 | import android.net.Uri 9 | import android.os.Build 10 | import android.os.Bundle 11 | import android.provider.Settings 12 | import android.util.Log 13 | import android.view.Menu 14 | import android.view.MenuItem 15 | import android.view.View 16 | import android.view.ViewGroup 17 | import android.widget.ArrayAdapter 18 | import android.widget.Toast 19 | import androidx.activity.result.contract.ActivityResultContracts.RequestPermission 20 | import androidx.appcompat.app.AppCompatActivity 21 | import androidx.appcompat.widget.Toolbar 22 | import androidx.core.app.NotificationManagerCompat 23 | import androidx.core.view.get 24 | import androidx.preference.PreferenceManager 25 | import com.google.android.material.dialog.MaterialAlertDialogBuilder 26 | import com.urbandroid.dontkillmyapp.domain.Benchmark 27 | import com.urbandroid.dontkillmyapp.service.BenchmarkService 28 | import kotlinx.android.synthetic.main.activity_main.* 29 | 30 | class MainActivity : AppCompatActivity() { 31 | 32 | val launchServiceAfterPermission = registerForActivityResult(RequestPermission()) { 33 | if (it) { 34 | startBenchmark() 35 | } 36 | } 37 | val chooseDurationAfterPermission = registerForActivityResult(RequestPermission()) { 38 | if (it) { 39 | chooseDuration() 40 | } 41 | } 42 | 43 | override fun onCreate(savedInstanceState: Bundle?) { 44 | super.onCreate(savedInstanceState) 45 | setContentView(R.layout.activity_main) 46 | 47 | val topView = findViewById(dev.doubledot.doki.R.id.deviceManufacturerHeader) 48 | 49 | val param = topView.layoutParams as ViewGroup.MarginLayoutParams 50 | param.setMargins(0, 64.dp,0,0) 51 | topView.layoutParams = param 52 | 53 | val appBar = findViewById(dev.doubledot.doki.R.id.appbar) 54 | val cToolbar = (appBar.get(0) as ViewGroup).get(0) as ViewGroup 55 | val parent = findViewById(dev.doubledot.doki.R.id.doki_full_content) 56 | var fab = layoutInflater.inflate(R.layout.view_fab, parent, false) 57 | var toolbar = layoutInflater.inflate(R.layout.view_toolbar, cToolbar, false) as Toolbar 58 | parent.addView(fab, parent.childCount) 59 | cToolbar.addView(toolbar, 0) 60 | 61 | setSupportActionBar(toolbar) 62 | supportActionBar?.setTitle("") 63 | 64 | fab.setOnClickListener { 65 | Log.i(TAG, "start clicked") 66 | 67 | if (BenchmarkService.RUNNING) { 68 | Toast.makeText(this, R.string.already_running, Toast.LENGTH_LONG).show() 69 | } else { 70 | if (hasExactAlarmPermission(this)) { 71 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !NotificationManagerCompat.from(this).areNotificationsEnabled()) { 72 | chooseDurationAfterPermission.launch(permission.POST_NOTIFICATIONS) 73 | } else { 74 | chooseDuration() 75 | } 76 | } 77 | } 78 | } 79 | } 80 | 81 | fun chooseDuration() { 82 | val builder = MaterialAlertDialogBuilder(this) 83 | builder.setTitle(R.string.duration) 84 | 85 | val arrayAdapter = ArrayAdapter( 86 | this, 87 | R.layout.dialog_item, resources.getStringArray(R.array.duration_array) 88 | ) 89 | 90 | builder.setNegativeButton(R.string.cancel, null) 91 | 92 | builder.setAdapter(arrayAdapter 93 | ) { _, which -> 94 | PreferenceManager.getDefaultSharedPreferences(this).edit().putLong( 95 | KEY_BENCHMARK_DURATION, (which * HOUR_IN_MS) + HOUR_IN_MS 96 | ).apply() 97 | 98 | val builder = MaterialAlertDialogBuilder(this) 99 | builder.setTitle(R.string.warning_title) 100 | builder.setMessage(R.string.warning_text) 101 | builder.setPositiveButton( 102 | R.string.ok 103 | ) { _, _ -> 104 | startBenchmark() 105 | } 106 | builder.setNegativeButton(R.string.cancel, null) 107 | 108 | builder.show() 109 | } 110 | builder.show() 111 | 112 | } 113 | 114 | fun startBenchmark() { 115 | Toast.makeText(MainActivity@this, R.string.started, Toast.LENGTH_SHORT).show() 116 | BenchmarkService.start(this) 117 | } 118 | 119 | val Int.dp: Int get() = (this * getSystem().displayMetrics.density).toInt() 120 | 121 | fun hasExactAlarmPermission(context : Context) : Boolean { 122 | val am = context.getSystemService(AppCompatActivity.ALARM_SERVICE) as AlarmManager 123 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !am.canScheduleExactAlarms()) { 124 | val builder = MaterialAlertDialogBuilder(this) 125 | builder.setTitle(context.getString(R.string.exact_alarm_restrictions_title)) 126 | builder.setMessage(context.getString(R.string.exact_alarm_restrictions_summary)) 127 | builder.setPositiveButton( 128 | R.string.ok 129 | ) { _, _ -> 130 | try { 131 | val intent = Intent( 132 | Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM, 133 | Uri.fromParts("package", context.packageName, null) 134 | ) 135 | context.startActivity(intent) 136 | } catch (e: java.lang.Exception) { 137 | Toast.makeText( 138 | context, R.string.general_error, 139 | Toast.LENGTH_LONG 140 | ).show() 141 | } 142 | } 143 | builder.setNegativeButton(R.string.cancel, null) 144 | builder.show() 145 | return false 146 | } 147 | return true 148 | } 149 | 150 | 151 | override fun onResume() { 152 | super.onResume() 153 | 154 | doki_content.loadContent() 155 | doki_content.setButtonsVisibility(false) 156 | 157 | val currentBenchmark = Benchmark.load(this) 158 | currentBenchmark?.let { 159 | if (it.running) { 160 | if (hasExactAlarmPermission(this)) { 161 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !NotificationManagerCompat.from(this).areNotificationsEnabled()) { 162 | launchServiceAfterPermission.launch(permission.POST_NOTIFICATIONS) 163 | } else { 164 | startBenchmark() 165 | } 166 | } 167 | } else { 168 | ResultActivity.start(this) 169 | } 170 | } 171 | 172 | } 173 | 174 | 175 | override fun onCreateOptionsMenu(menu: Menu): Boolean { 176 | menuInflater.inflate(R.menu.menu_main, menu) 177 | return true 178 | } 179 | 180 | override fun onOptionsItemSelected(item: MenuItem): Boolean { 181 | when (item.itemId) { 182 | R.id.how_it_works -> { 183 | val builder = MaterialAlertDialogBuilder(this) 184 | builder.setTitle(R.string.how_it_works) 185 | builder.setMessage(R.string.how_it_works_text) 186 | builder.setPositiveButton(R.string.ok, null) 187 | builder.show() 188 | } 189 | R.id.support -> { 190 | var subject = "DontKillMyApp Feedback" 191 | var body = "" 192 | 193 | val i = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:support@urbandroid.com?&subject=" + Uri.encode(subject) + 194 | "&body=")) 195 | 196 | i.putExtra(Intent.EXTRA_SUBJECT, subject) 197 | try { 198 | startActivity(Intent.createChooser(i, getString(R.string.contact_support))) 199 | } catch (e: Exception) { 200 | Log.e(TAG, "Error $e") 201 | } 202 | 203 | } 204 | R.id.tell_others -> { 205 | var subject = "${getString(R.string.app_name)} ${getString(R.string.benchmark)}" 206 | var body = getString(R.string.tell_others_text) 207 | 208 | val i = Intent(Intent.ACTION_SEND) 209 | i.type = "text/plain" 210 | 211 | i.putExtra(Intent.EXTRA_SUBJECT, subject) 212 | i.putExtra(Intent.EXTRA_TEXT, body) 213 | try { 214 | startActivity(Intent.createChooser(i, getString(R.string.tell_others))) 215 | } catch (e: Exception) { 216 | Log.e(TAG, "Error $e") 217 | } 218 | 219 | } 220 | R.id.rate -> { 221 | val url = "$PLAY_STORE_PREFIX$packageName" 222 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 223 | try { 224 | startActivity(intent) 225 | } catch (e: java.lang.Exception) { 226 | Toast.makeText(this, "Cannot open $url", Toast.LENGTH_LONG).show() 227 | } 228 | } 229 | R.id.source -> { 230 | val url = "https://github.com/urbandroid-team/dontkillmy-app" 231 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 232 | try { 233 | startActivity(intent) 234 | } catch (e: java.lang.Exception) { 235 | Toast.makeText(this, "Cannot open $url", Toast.LENGTH_LONG).show() 236 | } 237 | } 238 | R.id.translate -> { 239 | val url = "https://docs.google.com/spreadsheets/d/1DJ6nvdv2X8Q8e4NXu9VE0dT3SL72JX9evTmlDDALfRM/edit#gid=141810181" 240 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 241 | try { 242 | startActivity(intent) 243 | } catch (e: java.lang.Exception) { 244 | Toast.makeText(this, "Cannot open $url", Toast.LENGTH_LONG).show() 245 | } 246 | } 247 | } 248 | return true 249 | } 250 | 251 | } -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/RateActivity.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.net.Uri 6 | import android.os.Bundle 7 | import android.widget.Toast 8 | import androidx.appcompat.app.AppCompatActivity 9 | import androidx.preference.PreferenceManager 10 | import kotlinx.android.synthetic.main.activity_rate.* 11 | import java.util.concurrent.TimeUnit 12 | 13 | class RateActivity : AppCompatActivity() { 14 | override fun onCreate(savedInstanceState: Bundle?) { 15 | super.onCreate(savedInstanceState) 16 | setContentView(R.layout.activity_rate) 17 | 18 | setTitle(R.string.rate) 19 | 20 | rate.setOnClickListener { 21 | val url = "$PLAY_STORE_PREFIX$packageName" 22 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 23 | try { 24 | startActivity(intent) 25 | } catch (e: java.lang.Exception) { 26 | Toast.makeText(this, "Cannot open $url", Toast.LENGTH_LONG).show() 27 | } 28 | PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean(KEY_RATE_DONE, true).apply() 29 | finish() 30 | } 31 | 32 | later.setOnClickListener { 33 | setRateLater(this) 34 | finish() 35 | } 36 | 37 | never.setOnClickListener { 38 | PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean(KEY_RATE_NEVER, true).apply() 39 | 40 | finish() 41 | } 42 | } 43 | 44 | companion object { 45 | 46 | fun isRateDone(context : Context) : Boolean { 47 | return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(KEY_RATE_DONE, false) 48 | } 49 | 50 | fun isTimeToRateAgain(context : Context) : Boolean { 51 | val ts = PreferenceManager.getDefaultSharedPreferences(context).getLong(KEY_RATE_LATER, -1) 52 | return ts == -1L || System.currentTimeMillis() - ts > TimeUnit.DAYS.toMillis(7) 53 | } 54 | 55 | fun getTimeToRateAgain(context : Context) : Long { 56 | return PreferenceManager.getDefaultSharedPreferences(context).getLong(KEY_RATE_LATER, -1) 57 | } 58 | 59 | fun isRateNever(context : Context) : Boolean { 60 | return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(KEY_RATE_NEVER, false) 61 | } 62 | 63 | fun setRateLater(context : Context) { 64 | PreferenceManager.getDefaultSharedPreferences(context).edit().putLong(KEY_RATE_LATER, System.currentTimeMillis()).apply() 65 | } 66 | 67 | fun shouldStartRating(context : Context) : Boolean { 68 | return !isRateDone(context) && !isRateNever(context) && isTimeToRateAgain(context) 69 | } 70 | 71 | fun start(context : Context) { 72 | if (shouldStartRating(context)) { 73 | context.startActivity(Intent(context, RateActivity::class.java)) 74 | } 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/RestartReceiver.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp 2 | 3 | import android.content.BroadcastReceiver 4 | import android.content.Context 5 | import android.content.Intent 6 | import android.util.Log 7 | import com.urbandroid.dontkillmyapp.domain.Benchmark 8 | import com.urbandroid.dontkillmyapp.service.BenchmarkService 9 | 10 | class RestartReceiver : BroadcastReceiver() { 11 | 12 | override fun onReceive(context: Context?, intent: Intent?) { 13 | Log.i(TAG, "Receiver " + intent?.action) 14 | 15 | context?.apply { 16 | val currentBenchmark = Benchmark.load(context) 17 | if (currentBenchmark != null && currentBenchmark.running) { 18 | BenchmarkService.start(this) 19 | } 20 | 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/common.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp 2 | 3 | import java.util.concurrent.TimeUnit 4 | 5 | val ALARM_REPEAT_MS : Long = TimeUnit.MINUTES.toMillis(10) 6 | const val ALARM_REPEAT_MARGIN_MS : Long = 30000 7 | val WORK_REPEAT_MS : Long = TimeUnit.SECONDS.toMillis(10) 8 | val MAIN_REPEAT_MS : Long = TimeUnit.SECONDS.toMillis(10) 9 | 10 | val HOUR_IN_MS : Long = TimeUnit.HOURS.toMillis(1) 11 | val BENCHMARK_DURATION : Long = HOUR_IN_MS * 3 12 | 13 | const val KEY_RATE_LATER : String = "Rate_later_1" 14 | const val KEY_RATE_NEVER : String = "Rate_never_2" 15 | const val KEY_RATE_DONE : String = "Rate_done_2" 16 | const val KEY_BENCHMARK : String = "Benchmark" 17 | const val KEY_BENCHMARK_DURATION : String = "Benchmark_duration" 18 | 19 | const val NOTIFICATION_CHANNEL_FOREGROUND = "foreground" 20 | const val NOTIFICATION_CHANNEL_REPORT = "report" 21 | 22 | const val ACTION_ALARM = "com.urbandroid.dontkillmyapp.ACTION_ALARM" 23 | const val EXTRA_DURATION_MS : String = "extra_duration_ms" 24 | 25 | const val TAG = "DKMA" 26 | 27 | const val PLAY_STORE_PREFIX = "market://details?id=" 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/domain/Benchmark.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp.domain 2 | 3 | import android.annotation.SuppressLint 4 | import android.content.Context 5 | import android.os.Build 6 | import android.text.format.DateUtils 7 | import android.util.Log 8 | import androidx.preference.PreferenceManager 9 | import com.google.gson.Gson 10 | import com.urbandroid.dontkillmyapp.* 11 | import java.util.* 12 | import kotlin.math.roundToInt 13 | 14 | data class Benchmark(val from : Long, var to : Long) { 15 | 16 | var running : Boolean = true 17 | 18 | val workEvents = mutableListOf() 19 | val mainEvents = mutableListOf() 20 | val alarmEvents = mutableListOf() 21 | 22 | fun getWorkResult() : Float { 23 | return ((workEvents.size + 1) / ((to - from) / WORK_REPEAT_MS.toFloat())).coerceAtMost(1f) 24 | } 25 | 26 | fun getTotalResult() : Float { 27 | return (getWorkResult() + (2 * getAlarmResult()) + getMainResult()) / 4f 28 | } 29 | 30 | fun getMainResult() : Float { 31 | return ((mainEvents.size + 1) / ((to - from) / MAIN_REPEAT_MS.toFloat())).coerceAtMost(1f) 32 | } 33 | 34 | fun getAlarmResult() : Float { 35 | return ((alarmEvents.size + 1) / ((to - from) / (ALARM_REPEAT_MS + ALARM_REPEAT_MARGIN_MS).toFloat())).coerceAtMost(1f) 36 | } 37 | 38 | fun getDuration() : Long { 39 | return to - from 40 | } 41 | 42 | fun getDurationSeconds() : Long { 43 | return (to - from) / 1000 44 | } 45 | 46 | 47 | override fun toString(): String { 48 | return "Benchmark ${Date(from)} ${Date(to)} MAIN ${mainEvents.size} WORK ${workEvents.size} ALARM ${alarmEvents.size}" 49 | } 50 | 51 | companion object { 52 | 53 | fun load(context : Context) : Benchmark? { 54 | val json = PreferenceManager.getDefaultSharedPreferences(context).getString(KEY_BENCHMARK, null) 55 | 56 | Log.i(TAG, "JSON: $json") 57 | 58 | json?.apply { 59 | return Gson().fromJson(json, Benchmark::class.java) 60 | } 61 | return null 62 | } 63 | 64 | 65 | fun generateTextReport(context : Context, benchmark : Benchmark?) : String { 66 | return "${context.getString(R.string.app_name)} ${context.getString(R.string.report)} \n\n" + 67 | "${Build.MODEL} (${Build.DEVICE}) by ${Build.MANUFACTURER}, Android ${Build.VERSION.RELEASE} \n\n" + 68 | "TOTAL \n${Benchmark.formatResult(benchmark?.getTotalResult() ?: 0f)} \n\n" + 69 | "WORK \n${Benchmark.formatResult(benchmark?.getWorkResult() ?: 0f)} \n\n" + 70 | "MAIN \n${Benchmark.formatResult(benchmark?.getMainResult() ?: 0f)} \n\n" + 71 | "ALARM \n${Benchmark.formatResult(benchmark?.getAlarmResult() ?: 0f)} \n\n" + 72 | "DURATION \n${DateUtils.formatElapsedTime((benchmark?.getDurationSeconds() ?: 0))} \n\n" + 73 | "Source: https://dontkillmyapp.com \n" 74 | } 75 | 76 | @SuppressLint("ApplySharedPref") 77 | fun save(context : Context, benchmark : Benchmark) { 78 | PreferenceManager.getDefaultSharedPreferences(context).edit().putString(KEY_BENCHMARK, Gson().toJson(benchmark)).commit() 79 | 80 | Log.i(TAG, "SAVE $benchmark") 81 | } 82 | 83 | @SuppressLint("ApplySharedPref") 84 | fun clear(context : Context) { 85 | PreferenceManager.getDefaultSharedPreferences(context).edit().putString(KEY_BENCHMARK, null).commit() 86 | } 87 | 88 | fun formatResult(result : Float) : String { 89 | return "${(result * 100).roundToInt()}%" 90 | // return "${DecimalFormat("0.0").format(result * 100)}%" 91 | } 92 | 93 | fun finishBenchmark(context : Context, benchmark: Benchmark) { 94 | benchmark.running = false 95 | benchmark.to = System.currentTimeMillis() 96 | save(context, benchmark) 97 | 98 | Log.i(TAG, "FINISH $benchmark") 99 | } 100 | 101 | } 102 | 103 | 104 | } -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/gui/BenchmarkView.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp.gui 2 | 3 | import android.content.Context 4 | import android.graphics.Canvas 5 | import android.graphics.Color 6 | import android.graphics.Paint 7 | import android.graphics.Path 8 | import android.util.AttributeSet 9 | import android.view.View 10 | import com.urbandroid.dontkillmyapp.domain.Benchmark 11 | import java.util.concurrent.TimeUnit 12 | 13 | class BenchmarkView constructor( 14 | context: Context, 15 | attrs: AttributeSet? = null, 16 | defStyleAttr: Int = 0, 17 | val benchmark : Benchmark 18 | ) : View(context, attrs, defStyleAttr) { 19 | 20 | var p : Paint = Paint() 21 | 22 | val timePerLine = TimeUnit.MINUTES.toMillis(5) 23 | 24 | fun getDip(context: Context, pixel: Int): Int { 25 | return (pixel.toFloat() * context.resources 26 | .displayMetrics.density + 0.5f).toInt() 27 | } 28 | 29 | override fun onDraw(canvas: Canvas?) { 30 | super.onDraw(canvas) 31 | 32 | p.style = Paint.Style.FILL 33 | p.color = Color.parseColor("#e57373") 34 | 35 | val lines = benchmark.getDuration() / timePerLine 36 | 37 | canvas?.let { 38 | val size = getDip(context, 2).toFloat() 39 | 40 | p.color = Color.parseColor("#FB8C00") 41 | 42 | benchmark.mainEvents.forEach{ 43 | val triangleSize = size * 1.5f 44 | 45 | val x = computeX(benchmark.from, benchmark.to, it, canvas, size) 46 | val y = computeY(benchmark.from, benchmark.to, it, canvas, size) 47 | 48 | canvas.drawPath(Path().apply { 49 | moveTo(x-triangleSize, y + triangleSize) 50 | lineTo(x+triangleSize, y + triangleSize) 51 | lineTo(x, y - size) 52 | lineTo(x - triangleSize, y + triangleSize) 53 | }, p) 54 | } 55 | 56 | p.color = Color.parseColor("#4CAF50") 57 | 58 | benchmark.workEvents.forEach{ 59 | val x = computeX(benchmark.from, benchmark.to, it, canvas, size) 60 | val y = computeY(benchmark.from, benchmark.to, it, canvas, size) 61 | 62 | canvas.drawCircle(x, y, size, p) 63 | } 64 | 65 | p.color = Color.parseColor("#3F51B5") 66 | benchmark.alarmEvents.forEach{ 67 | val x = computeX(benchmark.from, benchmark.to, it, canvas, size) 68 | val y = computeY(benchmark.from, benchmark.to, it, canvas, size) 69 | canvas.drawRect(x - size, y - size, x + size, y + size, p) 70 | } 71 | 72 | 73 | } 74 | 75 | 76 | } 77 | 78 | private fun computeX(from : Long, to : Long, ts : Long, canvas : Canvas, size : Float) : Float { 79 | return (((ts - from) % timePerLine / timePerLine.toFloat()) * (canvas.width - size)) + size 80 | } 81 | 82 | private fun computeY(from : Long, to : Long, ts : Long, canvas : Canvas, size : Float) : Float { 83 | return (((ts - from) / timePerLine) * (size * 4)) + size 84 | } 85 | 86 | } -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/gui/FloatingMaterialButtonBehavior.java: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp.gui; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | 7 | import androidx.coordinatorlayout.widget.CoordinatorLayout; 8 | import androidx.core.view.ViewCompat; 9 | 10 | import com.google.android.material.button.MaterialButton; 11 | import com.google.android.material.snackbar.Snackbar; 12 | 13 | public class FloatingMaterialButtonBehavior extends CoordinatorLayout.Behavior { 14 | private float mFabTranslationY; 15 | 16 | public FloatingMaterialButtonBehavior(Context context, AttributeSet attrs) { 17 | super(); 18 | } 19 | 20 | @Override 21 | public boolean layoutDependsOn(final CoordinatorLayout parent, final MaterialButton child, final View dependency) { 22 | return dependency instanceof Snackbar.SnackbarLayout; 23 | } 24 | 25 | @Override 26 | public boolean onDependentViewChanged(final CoordinatorLayout parent, final MaterialButton child, final View dependency) { 27 | // Logger.logInfo("Behavior: onDependentViewChanged " + dependency); 28 | if (dependency instanceof Snackbar.SnackbarLayout) { 29 | updateFabTranslationForSnackbar(parent, child, dependency); 30 | ViewCompat.setTranslationY(child, mFabTranslationY); 31 | } 32 | return false; 33 | } 34 | 35 | @Override 36 | public void onDependentViewRemoved(final CoordinatorLayout parent, final MaterialButton child, final View dependency) { 37 | super.onDependentViewRemoved(parent, child, dependency); 38 | // Logger.logInfo("Behavior: onDependentViewRemoved " + dependency); 39 | ViewCompat.setTranslationY(child, 0); 40 | } 41 | 42 | private void updateFabTranslationForSnackbar(CoordinatorLayout parent, final MaterialButton fab, View snackbar) { 43 | mFabTranslationY = getFabTranslationYForSnackbar(parent, fab, snackbar); 44 | // Logger.logInfo("Behavior: updateFabTranslationForSnackbar " + mFabTranslationY); 45 | } 46 | 47 | private float getFabTranslationYForSnackbar(CoordinatorLayout parent, MaterialButton fab, View snackbar) { 48 | float minOffset = 0; 49 | minOffset = Math.min(minOffset, ViewCompat.getTranslationY(snackbar) - snackbar.getHeight()); 50 | // Logger.logInfo("Behavior: onDependentViewRemoved " + minOffset); 51 | return minOffset; 52 | } 53 | } -------------------------------------------------------------------------------- /app/src/main/java/com/urbandroid/dontkillmyapp/service/BenchmarkService.kt: -------------------------------------------------------------------------------- 1 | package com.urbandroid.dontkillmyapp.service 2 | 3 | import android.app.AlarmManager 4 | import android.app.NotificationChannel 5 | import android.app.NotificationManager 6 | import android.app.PendingIntent 7 | import android.app.Service 8 | import android.content.BroadcastReceiver 9 | import android.content.Context 10 | import android.content.Intent 11 | import android.content.IntentFilter 12 | import android.os.Build 13 | import android.os.Handler 14 | import android.os.IBinder 15 | import android.os.PowerManager 16 | import android.util.Log 17 | import androidx.core.app.NotificationCompat 18 | import androidx.core.app.NotificationManagerCompat 19 | import androidx.core.content.ContextCompat 20 | import androidx.preference.PreferenceManager 21 | import com.urbandroid.dontkillmyapp.ACTION_ALARM 22 | import com.urbandroid.dontkillmyapp.ALARM_REPEAT_MS 23 | import com.urbandroid.dontkillmyapp.BENCHMARK_DURATION 24 | import com.urbandroid.dontkillmyapp.KEY_BENCHMARK_DURATION 25 | import com.urbandroid.dontkillmyapp.MAIN_REPEAT_MS 26 | import com.urbandroid.dontkillmyapp.NOTIFICATION_CHANNEL_FOREGROUND 27 | import com.urbandroid.dontkillmyapp.NOTIFICATION_CHANNEL_REPORT 28 | import com.urbandroid.dontkillmyapp.R 29 | import com.urbandroid.dontkillmyapp.ResultActivity 30 | import com.urbandroid.dontkillmyapp.TAG 31 | import com.urbandroid.dontkillmyapp.WORK_REPEAT_MS 32 | import com.urbandroid.dontkillmyapp.domain.Benchmark 33 | import java.text.DateFormat 34 | import java.util.* 35 | import java.util.concurrent.Executors 36 | import java.util.concurrent.ScheduledExecutorService 37 | import java.util.concurrent.TimeUnit 38 | 39 | 40 | class BenchmarkService : Service() { 41 | 42 | lateinit var currentBenchmark : Benchmark 43 | 44 | var wakeLock: PowerManager.WakeLock? = null 45 | 46 | lateinit var h : Handler 47 | 48 | var executor : ScheduledExecutorService? = null 49 | 50 | private val receiver = object:BroadcastReceiver() { 51 | override fun onReceive(context: Context?, intent: Intent?) { 52 | Log.i(TAG, "Broadcast ${intent?.action}") 53 | 54 | context?.let { 55 | when(intent?.action) { 56 | ACTION_ALARM -> { 57 | Log.i(TAG, "Alarm") 58 | currentBenchmark.alarmEvents.add(System.currentTimeMillis()) 59 | scheduleAlarm() 60 | checkBenchmarkEnd(currentBenchmark) 61 | } 62 | else -> return 63 | } 64 | } 65 | } 66 | } 67 | 68 | private val mainRunnable = object:Runnable { 69 | override fun run() { 70 | Log.i(TAG, "Main") 71 | h.postDelayed(this, MAIN_REPEAT_MS) 72 | currentBenchmark.mainEvents.add(System.currentTimeMillis()) 73 | checkBenchmarkEnd(currentBenchmark) 74 | } 75 | } 76 | 77 | override fun onBind(intent: Intent?): IBinder? { 78 | return null 79 | } 80 | 81 | override fun onCreate() { 82 | super.onCreate() 83 | 84 | Log.i(TAG, "onCreate") 85 | 86 | RUNNING = true 87 | 88 | h = Handler() 89 | 90 | val now = System.currentTimeMillis() 91 | 92 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 93 | val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager 94 | 95 | val channelName = getString(R.string.benchmark); 96 | val importance = NotificationManager.IMPORTANCE_LOW; 97 | val notificationChannel = NotificationChannel(NOTIFICATION_CHANNEL_FOREGROUND, channelName, importance); 98 | notificationChannel.setShowBadge(false) 99 | notificationManager.createNotificationChannel(notificationChannel); 100 | 101 | val channelNameReport = getString(R.string.report); 102 | val importanceReport = NotificationManager.IMPORTANCE_HIGH; 103 | val notificationChannelReport = NotificationChannel(NOTIFICATION_CHANNEL_REPORT, channelNameReport, importanceReport); 104 | notificationChannelReport.setShowBadge(true) 105 | notificationManager.createNotificationChannel(notificationChannelReport); 106 | } 107 | 108 | val duration = PreferenceManager.getDefaultSharedPreferences(this).getLong(KEY_BENCHMARK_DURATION, BENCHMARK_DURATION) 109 | 110 | currentBenchmark = Benchmark.load(this) ?: Benchmark(now, now + duration).also { 111 | Benchmark.save(this, it) 112 | } 113 | 114 | Log.i(TAG, "Benchmark $currentBenchmark RUNNING ${currentBenchmark.running}") 115 | 116 | val i = Intent(this, ResultActivity::class.java) 117 | i.flags = Intent.FLAG_ACTIVITY_NEW_TASK 118 | val pi = PendingIntent.getActivity(this, 4242, i, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) 119 | 120 | val notificationBuilder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_FOREGROUND) 121 | .setSmallIcon(R.drawable.ic_dkma) 122 | .setChannelId(NOTIFICATION_CHANNEL_FOREGROUND) 123 | .setColor(ContextCompat.getColor(this, R.color.colorPrimary)) 124 | .setContentIntent(pi) 125 | .addAction(0, getString(R.string.stop), pi) 126 | .setShowWhen(false) 127 | .setContentText(getString(R.string.running, DateFormat.getTimeInstance(DateFormat.SHORT).format(Date(currentBenchmark.from)), DateFormat.getTimeInstance(DateFormat.SHORT).format(Date(currentBenchmark.to)))) 128 | 129 | if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { 130 | notificationBuilder.setContentTitle(getString(R.string.app_name)) 131 | } 132 | 133 | startForeground(2342, notificationBuilder.build()) 134 | 135 | checkBenchmarkEnd(currentBenchmark) 136 | 137 | currentBenchmark.workEvents.add(System.currentTimeMillis()) 138 | 139 | executor = Executors.newScheduledThreadPool(1) 140 | executor?.scheduleAtFixedRate(Runnable { 141 | h.post(Runnable { 142 | Log.i(TAG, "Work") 143 | currentBenchmark.workEvents.add(System.currentTimeMillis()) 144 | 145 | checkBenchmarkEnd(currentBenchmark) 146 | }) 147 | }, WORK_REPEAT_MS, WORK_REPEAT_MS, TimeUnit.MILLISECONDS) 148 | 149 | h.post(mainRunnable) 150 | 151 | registerReceiver(receiver, IntentFilter(ACTION_ALARM)); 152 | scheduleAlarm() 153 | 154 | wakeLock = 155 | (getSystemService(Context.POWER_SERVICE) as PowerManager).run { 156 | newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "DKMA::BenchmarkWakeLock").apply { 157 | acquire() 158 | } 159 | } 160 | } 161 | 162 | private fun checkBenchmarkEnd(benchmark : Benchmark) : Boolean { 163 | Log.i(TAG, "Benchmark running ${benchmark.running}") 164 | Benchmark.save(this, currentBenchmark) 165 | 166 | if (!benchmark.running) { 167 | Log.i(TAG, "Benchmark not running, stop service") 168 | stopSelf() 169 | return true 170 | } 171 | if (System.currentTimeMillis() > benchmark.to) { 172 | Log.i(TAG, "Benchmark completed, finishing") 173 | Benchmark.finishBenchmark(this, benchmark) 174 | showFinishNotification() 175 | stopSelf() 176 | return true 177 | } 178 | return false 179 | } 180 | 181 | private fun showFinishNotification() { 182 | val i = Intent(this, ResultActivity::class.java) 183 | i.flags = Intent.FLAG_ACTIVITY_NEW_TASK 184 | val pi = PendingIntent.getActivity(this, 4242, i, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) 185 | 186 | val notificationBuilder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_FOREGROUND) 187 | .setSmallIcon(R.drawable.ic_dkma) 188 | .setChannelId(NOTIFICATION_CHANNEL_REPORT) 189 | .setColor(ContextCompat.getColor(this, R.color.colorPrimary)) 190 | .setContentIntent(pi) 191 | .setAutoCancel(true) 192 | .setShowWhen(false) 193 | .setContentText(getString(R.string.finished)) 194 | 195 | if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { 196 | notificationBuilder.setContentTitle(getString(R.string.app_name)) 197 | } 198 | 199 | with(NotificationManagerCompat.from(this)) { 200 | notify(4242, notificationBuilder.build()) 201 | } 202 | 203 | } 204 | 205 | private fun getAlarmIntent() : PendingIntent { 206 | val i = Intent(ACTION_ALARM) 207 | i.setPackage(packageName) 208 | return PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE) 209 | } 210 | 211 | fun scheduleAlarm() { 212 | Log.i(TAG, "Scheduling at alarm ${Date(System.currentTimeMillis() + ALARM_REPEAT_MS)}") 213 | when { 214 | Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> { 215 | (getSystemService(Context.ALARM_SERVICE) as AlarmManager).setExactAndAllowWhileIdle( 216 | AlarmManager.RTC_WAKEUP, 217 | System.currentTimeMillis() + ALARM_REPEAT_MS, 218 | getAlarmIntent() 219 | ) 220 | } 221 | Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT -> { 222 | (getSystemService(Context.ALARM_SERVICE) as AlarmManager).setExact( 223 | AlarmManager.RTC_WAKEUP, 224 | System.currentTimeMillis() + ALARM_REPEAT_MS, 225 | getAlarmIntent() 226 | ) 227 | } 228 | else -> { 229 | (getSystemService(Context.ALARM_SERVICE) as AlarmManager).set( 230 | AlarmManager.RTC_WAKEUP, 231 | System.currentTimeMillis() + ALARM_REPEAT_MS, 232 | getAlarmIntent() 233 | ) 234 | } 235 | } 236 | } 237 | 238 | private fun cancelAlarm() { 239 | (getSystemService(Context.ALARM_SERVICE) as AlarmManager).cancel(getAlarmIntent()) 240 | } 241 | 242 | override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { 243 | return START_STICKY 244 | } 245 | 246 | override fun onDestroy() { 247 | super.onDestroy() 248 | 249 | unregisterReceiver(receiver) 250 | 251 | cancelAlarm() 252 | 253 | h.removeCallbacks(mainRunnable) 254 | 255 | //supervisorJob.cancelChildren() 256 | 257 | wakeLock?.release() 258 | 259 | executor?.shutdown() 260 | 261 | RUNNING = false 262 | } 263 | 264 | companion object { 265 | 266 | var RUNNING : Boolean = false 267 | 268 | fun start(context : Context) { 269 | Log.i(TAG, "Starting service") 270 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 271 | context.startForegroundService(Intent(context, BenchmarkService::class.java)) 272 | } else { 273 | context.startService(Intent(context, BenchmarkService::class.java)) 274 | } 275 | } 276 | 277 | fun stop(context : Context) { 278 | context.stopService(Intent(context, BenchmarkService::class.java)) 279 | } 280 | } 281 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-hdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-hdpi/ic_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-hdpi/ic_work.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-mdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-mdpi/ic_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-mdpi/ic_work.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-nodpi/rate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-nodpi/rate.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-xhdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-xhdpi/ic_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-xhdpi/ic_work.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_alarm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-xxhdpi/ic_alarm.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-xxhdpi/ic_main.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/drawable-xxhdpi/ic_work.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dkma.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_circle_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 18 | 22 | 26 | 30 | 34 | 38 | 42 | 46 | 50 | 54 | 58 | 62 | 63 | -------------------------------------------------------------------------------- /app/src/main/res/layout-v21/view_report.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 21 | 22 | 28 | 29 | 34 | 35 | 41 | 52 | 53 | 60 | 61 | 62 | 68 | 79 | 80 | 87 | 88 | 89 | 90 | 96 | 97 | 108 | 109 | 116 | 117 | 118 | 119 | 120 | 121 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_rate.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | 14 | 18 | 19 | 20 | 21 | 29 | 30 | 39 | 40 | 41 | 42 | 47 | 54 | 61 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 20 | 27 | 28 | 29 | 30 | 39 | 40 | 41 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 26 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_fab.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_report.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | 13 | 20 | 21 | 27 | 28 | 33 | 34 | 40 | 50 | 51 | 57 | 58 | 59 | 65 | 75 | 76 | 82 | 83 | 84 | 85 | 91 | 92 | 102 | 103 | 109 | 110 | 111 | 112 | 113 | 114 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /app/src/main/res/layout/view_toolbar.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 10 | 11 | 12 | 15 | 18 | 21 | 24 | 27 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_result.xml: -------------------------------------------------------------------------------- 1 | 5 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v31/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-hdpi/ic_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-mdpi/ic_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-xhdpi/ic_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-xxhdpi/ic_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Začít měřit 6 | Vypnout měření 7 | Měření 8 | Měření běží (%1$s - %2$s) vypněte zde. 9 | Měření skončilo, ukaž výsledky. 10 | Měření již běží 11 | Stop 12 | Vymazat 13 | Vlákna 14 | Alarm 15 | Hlavní 16 | Sdílet 17 | Sdílet s 18 | Report 19 | Doba 20 | Pozor 21 | Nenabíjejte telefon a zkuste s ním nepracovat po celou dobu měření. 22 | Zrušit 23 | OK 24 | Celkem 25 | 26 | 1 hodina 27 | 2 hodiny 28 | 3 hodiny 29 | 4 hodiny 30 | 5 hodin 31 | 6 hodin 32 | 7 hodin 33 | 8 hodin 34 | 35 | Jak to funguje 36 | Meření nastartuje službu na popředí, udržuje CPU zapnuté a nastaví opakující se úlohy na hlavním vlákně (po 10ti sekundách) a na dalších vláknech (po 10ti sekundách) a alarmy (AlarmManager.setExactAndAllowWhileIdle po 10ti minutách). Na konci se spočítá skóre jako uskutečněné proti očekávaným.\n\nHodnoty blízko 100% jsou dobrý výsledek - žádná nestandardní omezení nejspíš nejsou momentálně aktivní. Zkuste měření za týden opakovat, protože někteří výrobci zapínaji zabijáky aplikací až po nějaké době co není aplikace používána.\n\nGRAF\n\nKaždý řádek reprezentuje 5 minut. Ideálně vidíte v grafu 30 koleček a trojúhelníků na řádek a jeden čtverec na každém druhém řádku. Větší bílá místa znamenají problém - Vaše aplikace nemusí pracovat správně pokud nezměníte nastavení telefonu.\n\nPro více informací se podívejte na https://dontkillmyapp.com a nebo přímo do zdrojáku na https://github.com/urbandroid-team/dontkillmy-app 37 | Kontaktujte podporu 38 | Řekněte to ostatním 39 | DontKillMyApp měří jak fungují procesy v pozadí na Vašem telefonu, aby Vaše aplikace fungovali správně.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 40 | Prosím ohodnoťte nás 41 | Hodnocení 42 | Nikdy 43 | Později 44 | Zdrojový kód 45 | Chceme, aby aplikace fungovaly i na telefonech výrobců, kteří upřednostňují baterii před užitečností aplikací.\n\nPomozte nám zviditelnit tento problém. Nejlépe tím, že ohodnotíte tuto aplikaci, která je zdarma a má otevřený zdrojový kód na Obchodě Play a napíšete nám zkušenosti, jak Vám aplikace pomohla.\n\nDěkujeme za Vaši podporu a důvěru, že nám pomáháte zlepšovat svět Androidích zařízení. 46 | Nech apky žít 47 | Oficiální aplikace projektu DontKillMyApp je zde - konečně můžete nechat apky žít i na Vašem telefonu i když o zrovna neni Pixel. 48 | 49 | Aplikace Vám pomůže nastavit telefon tak, aby aplikace začali být užitečné i když zrovna nedržíte telfon v ruce. 50 | 51 | Podívejte se jak si vede Váš telefoin ve sruvnaní s ostatními díky funkci Benchmark. 52 | 53 | Vlatnosti: 54 | - DKMA Benchmark: změřte si jak agresivně zabíjí Váš telefon užitečné aplikace 55 | - Návody: podívejte se jak nastavit telefon, aby nechal aplikace žít 56 | - Umožněte změnu: nasdílejte zvoj report s projketem DKMA, abychom veděli jak si jednotlivé telefony vedou 57 | 58 | Nejprve změřtre telefon, pokud je Vaše skóre nízké, udělejte změny podle návodu a opakujet měření, abyste ověřili, že se nastavení podařilo. 59 | 60 | 61 | Projekt DKMA vyvíjejí a udržují dobrovolníci, kterým není jedno v jakém stavu je Androidí ekosystém a usilují o jeho zlepšení. Tato aplikace má otevřený zdrojový kód, který můžete nalézt na https://github.com/urbandroid-team/dontkillmy-app. 62 | Povolit přesné plánování poplachu 63 | Prosím, dovolte nám naplánovat přesné alarmy a správně otestujte zpracování pozadí založeného na zařízení Yoru. 64 | Něco se pokazilo. 65 | Benchmark běží 66 | -------------------------------------------------------------------------------- /app/src/main/res/values-da/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Start kontrol 6 | Stop kontrol 7 | Kontrollér 8 | Kontrol kører (%1$s - %2$s), tryk for at stoppe. 9 | Kontrol afsluttet, tryk for at se resultatet 10 | Kontrol kører allerede 11 | Stop 12 | Slet 13 | Arbejde 14 | Alarm 15 | Main 16 | Del 17 | Del med 18 | Rapportér 19 | Varighed 20 | Advarsel 21 | Undlad venligst at oplade din telefon - og at bruge den - under hele kontrollen. 22 | Afbryd 23 | OK 24 | Total 25 | 26 | 1 time 27 | 2 timer 28 | 3 timer 29 | 4 timer 30 | 5 timer 31 | 6 timer 32 | 7 timer 33 | 8 timer 34 | 35 | 36 | DontKillMyApp.com 37 | E-mail 38 | Anden måde... 39 | 40 | Hvordan virker det? 41 | Kontrollen starter en forgrunds-service som forhindrer skærmen i at låse, og igangsætter gentagne opgaver i hovedtråden (hver 10. sekund), en brugerdefineret tråd (også hver 10. sekund) og planlægger gentagne alarmer ved hjælp af AlarmManager.setExactAndAllowWhileIdle (hver 10. minut). Der beregnes en score ved at sammenligne det afviklede med det forventede.\n\nEn score tæt på 100% er en god score - ikke-standard batteri-optimeringer anvendes pt. ikke. Det kan være en god idé at gentage testen efter nogle uger, da nogle telefonproducenter lægger begrænsninger på apps som ikke har været i brug i en længere periode.\n\nGRAFEN\n\nHver række i grafen repræsenterer 5 minutter. Helt ideelt burde der være 30 cirkler og trekanter på hver linje og en kasse på hver anden linje. Større blanke områder indikerer at der er et problem - dine apps virker formodentlig ikke som forventet, med mindre du ændrer din telefons indstillinger.\n\n For flere detaljer kan koden til app\'en ses på https://github.com/urbandroid-team/dontkillmy-app 42 | Kontakt support 43 | Fortæl det til andre 44 | DontKillMyApp Kontrol tjekker din telefons afvikling af apps i baggrunden, for at få din telefon til at fungere korrekt.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Bedøm os venligst! 46 | Bedøm 47 | Aldrig 48 | Senere 49 | Kildekode 50 | Vi ønsker at vores apps virker på telefoner, hvis producent fortrækker batterilevetid over funktionalitet.\n\nDen bedste måde du kan hjælpe med at udbrede kendskabet til dette gratis open-source-tool er ved at bedømme det i Play Butikken og skrive en kommentar.\n\nTusind tak fordi du hjælper os med at gøre Android til et bedre sted! 51 | Hjælp med at oversætte app\'en 52 | Få app\'en til at virke 53 | Den officielle DontKillMyApp-app er her - få dine apps til at fungere korrekt, selvom du ikke ejer en Pixel. 54 | 55 | Hjælper dig med at indstille din telefons baggrunds-programmer så dine apps kan virke for DIG, selv når du ikke kigger på en tændt skærm. 56 | 57 | Se hvordan din telefon rangerer og afprøv forskellige indstillinger med DontKillMyApp-kontrollen. 58 | 59 | Funktioner: 60 | • DKMA-kontrol: Mål hvor aggresivt din telefon stopper baggrunds-apps 61 | • Guider: Få konkrete anvisninger på at undgå de fleste begrænsninger for baggrundsprocesser 62 | • Gør en forskel:️ Hjælp smart-phones med at være smarte ved at dele dine resultater med dontkillmyapp.com 63 | 64 | DontKillMyApp er et kontrolværktøj som undersøger hvor godt din telefon understøtter baggrundsprocesser. Du kan kontrollere før du konfigurerer din telefons indstillinger. Gennemgå derefter vores setup-guides og kontrollér igen for at se hvor meget din telefon har slækket på apps der kører i baggrunden. 65 | 66 | Du kan sende din rapport direkte fra app\'en til udviklerne hos dontkillmyapp.com-hjemmesiden, som samler alle resultater til en global score. 67 | 68 | Hvordan virker kontrollen? (Teknisk forklaring!) 69 | 70 | App\'en starter en service-app som låser skærmen til at være tændt og planlægger gentagne opgaver i hovedtråden, en brugerdefineret tråd og planlægger gentagne alarmer (AlarmManager.setExactAndAllowWhileIdle). Derefter beregnes eksekveret i forhold til forventet. Det er det hele! 71 | 72 | For flere detaljer, tjek koden. App\'en er open-source, og kan findes på https://github.com/urbandroid-team/dontkillmy-app 73 | 74 | Særlig tak til Doki (github.com/doubledotlabs/doki). 75 | Tillad nøjagtig alarmplanlægning 76 | Tillad os at planlægge nøjagtige alarmer for korrekt at teste Yoru-enhedsalarmbaseret baggrundsbehandling. 77 | Noget gik galt. 78 | Benchmark kører 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Überprüfung starten 6 | Überprüfung stoppen 7 | Überprüfen 8 | Überprüfung läuft (%1$s - %2$s) zum Stoppen drücken. 9 | Überprüfung beendet, für Ergebnisse drücken. 10 | Überprüfung läuft bereits 11 | Stop 12 | Löschen 13 | Arbeit 14 | Alarm 15 | Main 16 | Teilen 17 | Teilen mit 18 | Ergebnis 19 | Dauer 20 | Achtung 21 | Bitte das Telefon vom Ladegerät fernhalten und möglichst während der gesamten Überprüfung nicht verwenden. 22 | Abbrechen 23 | OK 24 | Gesamt 25 | 26 | 1 Stunde 27 | 2 Stunden 28 | 3 Stunden 29 | 4 Stunden 30 | 5 Stunden 31 | 6 Stunden 32 | 7 Stunden 33 | 8 Stunden 34 | 35 | 36 | DontKillMyApp.com 37 | E-Mail 38 | Anders 39 | 40 | Wie es funktioniert 41 | Die Überprüfung startet einen Vordergrunddienst mit einer Wecksperre und plant sich wiederholende Aufgaben für den Hauptthread (alle 10 Sekunden), einen benutzerdefinierten Thread-Executor (alle 10 Sekunden) und plant regelmäßige Alarme mit AlarmManager.setExactAndAllowWhileIdle (alle 10 Minuten). Anschließend wird die Punktzahl berechnet, indem die ausgeführten mit den erwarteten Werten verglichen werden.\n\nWerte nahe 100% sind gute Ergebnisse - nicht standardmäßige Batterieoptimierungen werden dann nicht angewendet. Trotzdem ist es gut, den Test in einer Woche zu wiederholen, da einige Betriebssysteme möglicherweise Beschränkungen für Apps anwenden, die für eine Weile nicht verwendet werden. \n\nDIE GRAFIK\n\nJede Zeile in der Grafik entspricht 5 Minuten. Idealerweise sehen Sie 30 Kreise und Dreiecke auf jeder Linie und ein Quadrat pro zweiter Linie. Größere Bereiche mit Leerzeichen weisen auf ein Problem hin. Ihre Apps funktionieren dann möglicherweise nicht wie vorgesehen, wenn Sie die Einstellungen Ihres Telefons nicht ändern.\n\nWeitere Informationen finden Sie im App-Code unter https://github. com/urbandroid-team/dontkillmy-app 42 | Entwickler kontaktieren 43 | Weitersagen 44 | DontKillMyApp Überprüfung kontrolliert das Hintergrundverhalten des Telefons, damit Apps auf demTelefon ordnungsgemäß funktionieren.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Bitte bewerte uns! 46 | Bewertung 47 | Nie 48 | Später 49 | Quellcode 50 | Wir möchten, dass Apps auch auf Telefonen funktionieren, deren Hersteller die Akkulaufzeit der Funktionalität vorziehen. \n\nDie beste Möglichkeit, dieses Projekt öffentlich zu machen, besteht darin, dieses kostenlose Open-Source-Tool im Play Store zu bewerten und zu kommentieren. \n\nVielen Dank für die Unterstützung, das Android-System zu einem besseren Ort zu machen! 51 | Hilf bei der Übersetzung 52 | Make apps work 53 | Die offizielle DontKillMyApp-App ist da - sorgen Sie dafür, dass Apps endlich richtig funktionieren, auch wenn Sie kein Pixel besitzen. 54 | 55 | Hilft Ihnen beim Einrichten Ihrer Telefon-Hintergrundaufgaben, damit Ihre Apps auch endlich für SIE richtig funktionieren können, auch wenn Sie gerade nicht auf den Bildschirm schauen. 56 | 57 | Sehen Sie, wie es Ihrem Telefon geht, und testen Sie verschiedene Einstellungen mit der DontKillMyApp-Überprüfung. 58 | 59 | Eigenschaften: 60 | • DKMA-Überprüfung: Messen Sie, wie aggressiv Ihr Telefon Hintergrund-Apps schließt 61 | • Anleitungen: Erhalten Sie detaillierte Schritt für Schritt Anleitungen, um die meisten Einschränkungen des Hintergrundprozesses zu überwinden 62 | • Nehmen Sie Änderungen selbst vor: ️Helfen Sie Smartphones, intelligent zu bleiben, indem Sie Ihren Überprüfungs-Bericht an dontkillmyapp.com weitergeben 63 | 64 | DontKillMyApp ist ein Überprüfungs-Tool, mit dem Sie feststellen können, wie gut Ihr Telefon die Hintergrundverarbeitung unterstützt. Sie können vor der Einrchtung Ihres Telefons zunächst überprüfen, dann die Einstellungs-Anleitungen durchgehen und erneut eine Überprüfung durchführen, um festzustellen, wie stark Ihr Telefon im Hintergrund nachgelassen hat. 65 | 66 | Sie können Ihren Bericht über die App an die Betreuer der Website dontkillmyapp.com weitergeben, die ihn zusammenstellen und die negative Gesamtpunktzahl darauf aufbauen. 67 | 68 | Wie funktioniert ie Überprüfung? (Technisch!) 69 | 70 | Die App startet einen Vordergrunddienst mit einer Wecksperre und plant sich wiederholende Aufgaben im Hauptthread, einem benutzerdefinierten Thread-Executor, und plant regelmäßige Alarme (AlarmManager.setExactAndAllowWhileIdle). Dann berechnet es die Ausführungen gegen die Erwartung. Das ist alles! 71 | 72 | Weitere Details finden Sie im Code. Die App ist Open-Source verfügbar unter https://github.com/urbandroid-team/dontkillmy-app 73 | 74 | Besonderer Dank geht an Doki (github.com/doubledotlabs/doki). 75 | Ermöglichen Sie eine genaue Alarmplanung 76 | Bitte erlauben Sie uns, genaue Alarme zu planen, um die alarmbasierte Hintergrundverarbeitung von YORU-Geräten ordnungsgemäß zu testen. 77 | Etwas ist schief gelaufen. 78 | Benchmark läuft 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Iniciar análisis 6 | Detener analisis 7 | Análisis 8 | Análisis en progreso (%1$s - %2$s) toca para detenerlo. 9 | El análisis finalizó, toca para ver los resultados. 10 | El análisis se está ejecutando ahora mismo. 11 | Parar 12 | Reiniciar 13 | Trabajando... 14 | Alarma 15 | Principal 16 | Compartir 17 | Compartir con: 18 | Reportar 19 | Duración 20 | ¡Atención! 21 | Por favor, desconecta el cargador, y no utilices el smartphone mientras se ejecuta el análisis. 22 | Cancelar 23 | OK 24 | Total 25 | 26 | 1 hora 27 | 2 horas 28 | 3 horas 29 | 4 horas 30 | 5 horas 31 | 6 horas 32 | 7 horas 33 | 8 horas 34 | 35 | 36 | DontKillMyApp.com 37 | Correo 38 | Otros 39 | 40 | ¿Cómo funciona? 41 | El análisis ejecuta un servicio en primer plano con un bloqueo de activación y programa tareas repetitivas en el hilo principal (cada 10 segundos). Una ejecución de un hilo personalizado (cada 10 s) y programa alarmas regulares usando AlarmManager.setExactAndAllowWhileIdle (Cada 10 minutos). 42 | Luego calcula la puntuación comparando ejecución vs. expectativa.\n\nLas puntuaciones cercanas al 100% son buenos resultados; las optimizaciones de batería no estándar no se aplican en este momento. Aunque es bueno repetir la prueba en una semana, ya que algunos OEM pueden aplicar límites a las aplicaciones que no se utilizan durante un tiempo.\n\nEL ANÁLISIS\n\nCada fila del gráfico representa 5 minutos. Lo ideal es que veas 30 círculos y triángulos en cada línea y un cuadrado cada segunda línea. Las regiones más grandes de espacios en blanco indican un problema: es posible que tus aplicaciones no funcionen como se esperaba si no cambias la configuración de tu teléfono.\n\n\Si eres programador puedes ver el código fuente de nuestra aplicacion por aquí: https://github.com/urbandroid-team/dontkillmy-app 43 | Contactar al soporte 44 | ¡Cuéntaselo a otras personas! 45 | El análisis de DontKillMyApp comprueba el procesamiento en segundo plano de su teléfono para que las aplicaciones de tu teléfono funcionen correctamente.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 46 | ¡Califícanos! 47 | Calificar 48 | Nunca 49 | Más tarde 50 | Código fuente 51 | Queremos hacer que tus aplicaciones se ejecuten siempre, incluso en smartphones los cuales los fabricantes prefieren que ahorres batería en vez de que tus aplicaciones sigan ejecutándose en segundo plano.\n\nLo mejor que podemos hacer para que este proyecto esté al alcance de todos es que (por favor) comentes y califiques esta aplicación.\n\n¡Muchas gracias por hacer que el ecosistema de Android sea un mejor lugar para todos! 52 | ¡Ayuda a traducir la app! 53 | Haz que tus aplicaciones funcionen 54 | DonKillMyApp finalmente llego - Haz que tus aplicaciones funcionen al 100% sin necesidad de ser dueño de un Google Pixel. 55 | 56 | Te ayudamos a que tu aplicacion se siga ejecutando en segundo plano. 57 | 58 | Observa como y realiza pruebas con nuestro efectivo analisis de aplicaciones. 59 | 60 | Caracteristicas: 61 | 62 | Analisis DKMA: Mide qué tan agresivamente está tu teléfono cerrando aplicaciones en segundo plano 63 | GUIA: Te ayudamos paso a paso a quitar las restricciones de tu celular 64 | Haz la diferencia: Ayudanos a que tu Smartphone, siga siendo inteligente, envia tus reportes a dontkillmyapp.com 65 | 66 | DonKillMyApp es una herramienta que analisa los procesos en segundo plano. Puedes analisar, luego paso a paso te indicaremos como quitar 67 | la restriccion de tu celular para que tus aplicaciones no se cierren automaticamente. 68 | 69 | Puedes compartir el analisis de tu caso desde la aplicacion o a traves de nuestro website dontkillmyapp.com, con esto ayudaras a otros 70 | a que no tengan el mismo problema. 71 | 72 | Como funciona nuestro analisis. (Tecnicamente) 73 | 74 | La aplicación inicia un servicio en primer plano con un bloqueo de activación y programa tareas repetitivas en el hilo principal, un ejecutor de hilo personalizado y programa alarmas regulares (AlarmManager.setExactAndAllowWhileIdle). Calculo vs. expectativa. Listo! 75 | 76 | Para mas detalles puedes ver el codigo fuente desde aqui https://github.com/urbandroid-team/dontkillmy-app 77 | 78 | Gracias a Doki (github.com/doubledotlabs/doki). 79 | Permitir la programación exacta de la alarma 80 | Permítanos programar alarmas exactas para probar correctamente el procesamiento de fondo basado en alarmas del dispositivo YORU. 81 | Algo salió mal. 82 | Benchmark se está ejecutando 83 | -------------------------------------------------------------------------------- /app/src/main/res/values-fa/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | شروع سنجش 6 | توقف سنجش 7 | سنجش 8 | سنجش در حال اجراست (%1$s - %2$s) برای توقف ضربه بزنید. 9 | سنجش پایان یافت، برای دیدن نتایج ضربه بزنید 10 | سنجش در حال حاضر در حال اجراست 11 | توقف 12 | پاک 13 | عمل 14 | زنگ هشدار 15 | اصلی 16 | اشتراک گذاری 17 | اشتراک گذاری با 18 | گزارش 19 | مدت زمان 20 | هشدار 21 | لطفاً تلفن خود را از شارژر دور نگه دارید و سعی کنید در کل سنجش از آن استفاده نکنید. 22 | لغو 23 | باشه 24 | مجموع 25 | 26 | ۱ ساعت 27 | ۲ ساعت 28 | ۳ ساعت 29 | ۴ ساعت 30 | ۵ ساعت 31 | ۶ ساعت 32 | ۷ ساعت 33 | ۸ ساعت 34 | 35 | 36 | DontKillMyApp.com 37 | ایمیل 38 | سایر 39 | 40 | چگونه کار میکند 41 | معیار یک سرویس پیش زمینه را با قفل بید شروع می کند و کارهای تکراری را در موضوع اصلی (هر۱۰ ثانیه)، یک مجری موضوع سفارشی (هر۱۰ ثانیه) انجام می دهد و آلارم های منظم را با استفاده از مدیر آلارم گوشی (هر ۱۰ دقیقه) برنامه ریزی می کند. این ایده خوبی است که تست را در یک هفته تکرار کنید زیرا ممکن است برخی برنامه های نصب شده محدودیت هایی را برای برنامه هایی اعمال کنند که برای مدتی استفاده نمی شوند. هر سطر در نمودار ۵ دقیقه را نشان می دهد. در حالت ایده آل ۳۰ دایره و مثلث را در هر خط و یک مربع در هر خط دومی مشاهده می کنید.مناطق بزرگتر از فضای سفید یک مشکل را نشان می دهد - اگر تنظیمات تلفن خود را تغییر ندهید ممکن است برنامه های شما مطابق آنچه در نظر گرفته شده کار نکنند. برای اطلاعات بیشتر کد برنامه را در https://github بررسی کنید. 42 | ارتباط با پشتیبانی 43 | معرفی به دیگران 44 | DontKillMyApp ، پردازش پس زمینه تلفن را بررسی می کند تا برنامه های روی تلفن شما به درستی کار کنند.https://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | لطفا به ما رای دهید! 46 | رای دادن 47 | هرگز 48 | بعدا 49 | کد منبع 50 | ما می خواهیم برنامه ها را حتی در تلفن هایی اجرایی کنیم که سازندگان باتری را بیش از عملکرد ترجیح می دهند. بهترین روشی که به شما در بهبود این پروژه کمک می کند این است که این ابزار رایگان و متن باز را در فروشگاه Play ارزیابی و بررسی کنید. خیلی ممنون برای کمک به ما در ساختن اکوسیستم اندرویدی به مکانی بهتر! 51 | برنامه ریزی دقیق زنگ هشدار 52 | لطفاً به ما اجازه دهید هشدارهای دقیقی را برای آزمایش صحیح پردازش پس زمینه مبتنی بر زنگ دستگاه YORU برنامه ریزی کنیم. 53 | مشکلی پیش آمد 54 | معیار در حال اجرا است 55 | -------------------------------------------------------------------------------- /app/src/main/res/values-fil/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Simulan ang pagsusulit 6 | Ihinto ang pagsusulit 7 | Pagsusulit 8 | Umaandar ang pagsusulit (%1$s - %2$s) pindutin upang ihinto. 9 | Tapos na ang pagsusulit, pindutin upang makita ang resulta 10 | Tumatakbo na ang pagsusulit 11 | Hinto 12 | Alisin 13 | Trabaho 14 | Alarma 15 | Pangunahin 16 | Ibahagi 17 | Ibahagi sa/kay 18 | Ulat 19 | Tagal 20 | Babala 21 | Huwag i-charge ang iyong telepono o gamitin ito habang umaandar ang pagsusulit. 22 | Kanselahin 23 | OK 24 | Kabuuan 25 | 26 | 1 oras 27 | 2 oras 28 | 3 oras 29 | 4 na oras 30 | 5 oras 31 | 6 na oras 32 | 7 oras 33 | 8 oras 34 | 35 | 36 | DontKillMyApp.com 37 | Email 38 | Iba pa 39 | 40 | Paano ito gumagana 41 | Gumagawa ang pagsusulit na ito ng isang serbisyo sa foreground na may wake lock at iniiskedyul ang mga paulit-ulit na gawain sa pangunahing thread (bawat 10s), isang custom thread executor (bawat 10s), at nagtatakda ng mga alarma gamit ang AlarmManager.setExactAndAllowWhileIdle (bawat 10 minuto). Pagkatapos ay kukuwentahin nito ang puntos sa pamamagitan ng pagkumpara sa kung ilang gawain ang matagumpay na napaandar vs. kung ilang gawain ang inasahang mapaaandar.\n\nMainam kung malapit sa 100% ang puntos na nakuha mo - hindi pa tumatakbo sa ngayon ang mga \'di-standard na optimisasyon sa baterya. Ngunit mainam kung uulitin mo ang pagsusulit pagkatapos ng isang linggo sapagkat may ilang OEM na nagpapataw ng limitasyon sa mga app na hindi nagamit nang ilang araw.\n\nANG GRAPH\n\nInirerepresenta ng bawat hilera ng graph ang 5 minuto. Maganda kung nakakakita ka ng 30 bilog at tatsulok sa bawat isang hilera at isang parisukat bawat dalawang hilera. May problema kung marami kang nakikitang puting espasyo o patlang - maaaring hindi gumana tulad ng inaasahan ang iyong mga app kung hindi mo babaguhin ang setting ng iyong telepono.\n\nPara sa karagdagang impormasyon, sumangguni sa https://github.com/urbandroid-team/dontkillmy-app 42 | Kausapin ang suporta 43 | Ipaalam sa iba 44 | ¡Ha llegado DontKillMyApp! - Haz que tus aplicaciones funcionen al 100% sin necesidad de ser dueño de un Google Pixel. 45 | 46 | Te ayudamos a que tus aplicaciones se sigan ejecutando en segundo plano. 47 | 48 | Observa cómo y realiza pruebas con nuestro efectivo análisis de aplicaciones. 49 | 50 | Características: 51 | 52 | Análisis DKMA: Mide qué tan agresivamente está tu teléfono cerrando aplicaciones en segundo plano. 53 | 54 | Guía: Te ayudamos paso a paso a quitar las restricciones de tu smartphone. 55 | 56 | Marca la diferencia: Ayúdanos a que tu smartphone siga siendo inteligente y envía tus reportes a dontkillmyapp.com. 57 | 58 | DontKillMyApp es una herramienta que analiza los procesos en segundo plano. Puedes analizar y luego paso a paso te indicaremos cómo quitar las restricciones de tu smartphone para que tus aplicaciones no se cierren automáticamente. 59 | 60 | Puedes compartir el análisis de tu caso desde la aplicación o a traves de nuestra página web dontkillmyapp.com, con esto ayudarás a otros usuarios a que no tengan el mismo problema. 61 | 62 | ¿Cómo funciona nuestro análisis? (Técnicamente) 63 | 64 | La aplicación inicia un servicio en primer plano con un bloqueo de activación y programa tareas repetitivas en el hilo principal, un ejecutor de hilo personalizado y programa alarmas regulares (AlarmManager.setExactAndAllowWhileIdle). Calcula la puntuación comparando ejecución vs. expectativa y ¡listo! 65 | 66 | Para más detalles, puedes ver el código fuente desde aquí: https://github.com/urbandroid-team/dontkillmy-app 67 | 68 | Gracias a Doki (github.com/doubledotlabs/doki). 69 | Salli tarkan hälytyksen aikataulun 70 | Anna meidän ajoittaa tarkat hälytykset testataksesi Yoru-laitteen hälytyspohjaisen taustakäsittelyn oikein. 71 | Jotain meni pieleen. 72 | Vertailuarvo on käynnissä 73 | -------------------------------------------------------------------------------- /app/src/main/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Commencer l\'évaluation 6 | Arrêter l\'évaluation 7 | Évaluation 8 | Évaluation en cours (%1$s - %2$s) appuyez pour arrêter. 9 | Évaluation terminée, appuyez pour voir les résultats 10 | Évaluation déjà en cours 11 | Arrêter 12 | Effacer 13 | Travail 14 | Alarme 15 | Principal 16 | Partager 17 | Partager avec 18 | Rapport 19 | Durée 20 | Attention 21 | Veuillez ne pas branchez pas votre téléphone et essayez de ne pas l\'utiliser pendant l\'évaluation. 22 | Annuler 23 | OK 24 | Total 25 | 26 | 1 heure 27 | 2 heures 28 | 3 heures 29 | 4 heures 30 | 5 heures 31 | 6 heures 32 | 7 heures 33 | 8 heures 34 | 35 | 36 | DontKillMyApp.com 37 | Courriel 38 | Autre 39 | 40 | Fonctionnement 41 | L\'évaluation lance un service en arrière-plan avec un verrouillage actif et planifie des taches répétitives dans le fil principal (toutes les 10 secondes), un lanceur de fil personnalisé (toutes les 10 secondes), et planifie des alarmes régulièrement en utilisant AlarmManager.setExactAndAllowWhileIdle (toutes les 10 minutes). Ensuite elle calcule le score en comparant ce qui a été lancé et ce qui est attendu. \n\nLes scores proches de 100% sont de bons résultats – les optimisations de batterie non-standard ne sont pas utilisées. Bien qu\'il est bon de répéter le test dans une semaine, vu que certains OEM peuvent appliquer des limites inactives pendant un certain temps.\n\nLE GRAPHIQUE\n\nChaque colonne dans le graphique représente 5 minutes. Idéalement vous verrez 30 cercles par ligne et un carré toutes les 2 lignes. De plus larges zones blanches indiquent un problème – votre application pourrait ne pas marcher comme prévu si vous ne changez pas les paramètres de votre smartphone. Pour plus d\'informations, allez voir le code source de l\'application sur https://github.com/urbandroid-team/dontkillmy-app 42 | Contacter le support 43 | Partager 44 | L\'évaluation de DontKillMyApp contrôle les processus en arrière-plan pour mieux faire fonctionner les applications de votre smartphone.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Notez-nous, s\'il vous plaît ! 46 | Noter 47 | Jamais 48 | Plus tard 49 | Code source 50 | Nous voulons faire des applications qui fonctionnent même sur les smartphones dont leurs fabricants privilégient la batterie au fonctionnement. \n\nLa meilleure façon de faire connaître ce projet est de noter et commenter cet outil gratuit et libre sur le Play Store. \n\nNous vous remercions beaucoup pour nous aider à rendre Android meilleur ! 51 | Aidez à traduire l\'application 52 | Faire fonctionner l\'application 53 | L\'application officielle DontKillMyApp est disponible – faites fonctionner vos applications normalement, même si vous n\'utilisez pas un Pixel. 54 | 55 | L\'application vous aide à paramétrer les tâches d\'arrière-plan de votre téléphone, afin que vos applications puissent fonctionner pour VOUS même si vous n\'êtes par sur votre écran. 56 | 57 | Regardez le fonctionnement de votre téléphone et testez différents paramètres avec l\'évaluation DontKillMyApp. 58 | 59 | Inclus : 60 | – Evaluation DKMA : Mesurez le niveau d\'aggressivité de votre téléphone pour fermer les applications d\'arrière-plan ; 61 | – Guides : Des étapes pour supprimer la plupart des restrictions de processus d\'arrière-plan ; 62 | – Faire un changement : Aidez les téléphones à rester intelligents en partageant votre rapport d\'évaluation sur dontkillmyapp.com. 63 | 64 | DontKillMyApp est un outil d\'évaluation permettant de savoir comment votre téléphone traite les processus d\'arrière-plan. Vous pouvez mesurer avant de paramétrer votre téléphone, puis suivre les guides de lancement et réévaluez pour voir ce que votre téléphone a fait en arrière-plan. 65 | 66 | Vous pouvez partagez votre rapport depuis l\'application aux gérants du site dontkillmyapp.com, qui les compilent et en font un score négatif. 67 | 68 | Comment fonctionne l\'évaluation? (Technique!) 69 | 70 | L\'application lance un service en arrière-plan, qui lance de façon répétitive une tâche, un éxécuteur et lance plusieurs alarmes régulières (AlarmManager.setExactAndAllowWhileIdle). C\'est tout! 71 | 72 | Pour plus de détails, regardez le code-source. L\'application est open source, disponible sur https://github.com/urbandroid-team/dontkillmy-app. Merci à Doki (github.com/doubledotlabs/doki). 73 | Autoriser la planification exacte des alarmes 74 | Veuillez nous permettre de planifier des alarmes exactes pour tester correctement le traitement d\'arrière-plan basé sur les alarmes de périphérique Yoru. 75 | Quelque chose s\'est mal passé. 76 | Benchmark est en cours d\'exécution 77 | -------------------------------------------------------------------------------- /app/src/main/res/values-id/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Mulai benchmark 6 | Hentikan benchmark 7 | Benchmark 8 | Benchmark sedang berlangsung (%1$s - %2$s) ketuk untuk menghentikan. 9 | Benchmark telah selesai, ketuk untuk melihat hasilnya 10 | Pembandingan telah berlangsung 11 | Hentikan 12 | Bersihkan 13 | Bekerja 14 | Alarm 15 | Utama 16 | Bagikan 17 | Bagikan dengan/via 18 | Laporan 19 | Durasi 20 | Peringatan 21 | Jangan isi daya dan jangan gunakan ponsel anda selama proses sedang berlangsung 22 | Batal 23 | OK 24 | Total 25 | 26 | 1 jam 27 | 2 jam 28 | 3 jam 29 | 4 jam 30 | 5 jam 31 | 6 jam 32 | 7 jam 33 | 8 jam 34 | 35 | 36 | DontKillMyApp.com 37 | Surel 38 | Lainnya 39 | 40 | Cara kerja 41 | Pengukuran memulai layanan latar depan dengan penguncian layar saat bangun dan menjadwalkan tugas berulang di thread utama (setiap 10 detik), eksekutor thread kustom (setiap 10 detik), dan menjadwalkan alarm reguler menggunakan AlarmManager.setExactAndAllowWhileIdle (setiap 10 menit). Kemudian ia menghitung skor dengan membandingkan yang dieksekusi dengan yang diharapkan. \n\nSkor yang mendekati 100% adalah hasil yang baik - pengoptimalan baterai non-standar tidak diterapkan pada saat itu. Namun, ide yang bagus untuk mengulang pengujian dalam seminggu karena beberapa OEM mungkin menerapkan batasan ke aplikasi yang tidak digunakan untuk sementara waktu.\n\nGrafik\n\nSetiap baris dalam grafik mewakili 5 menit. Idealnya Anda melihat 30 lingkaran dan segitiga di setiap baris dan satu persegi di setiap baris kedua. Wilayah ruang kosong yang lebih luas menunjukkan adanya masalah - aplikasi Anda mungkin tidak berfungsi sebagaimana mestinya jika Anda tidak akan mengubah setelan ponsel.\n\n\ Untuk detail selengkapnya, periksa kode aplikasi di https://github.com/ urbandroid-team/dontkillmy-app 42 | Hubungi dukungan 43 | Beritahukan kepada yang lain 44 | Benchmark DontKillMyApp memeriksa pemrosesan latar belakang ponsel Anda untuk membuat aplikasi di ponsel Anda bekerja dengan baik.\n\nhttps://play.google.com/store/apps/details?Id=com.urbandroid.dontkillmyapp 45 | Mohon beri kami bintang! 46 | Beri Nilai 47 | Jangan pernah 48 | Nanti 49 | Kode sumber 50 | Kami ingin membuat aplikasi berfungsi bahkan pada ponsel yang produsennya lebih menyukai baterai daripada fungsionalitas.\n\nCara terbaik untuk membantu proyek ini agar terlihat adalah dengan menilai dan mengomentari alat gratis dan sumber terbuka ini di Play Store.\n\nTerima kasih banyak untuk membantu kami membuat ekosistem Android menjadi tempat yang lebih baik! 51 | Bantu untuk menerjemahkan aplikasi ini 52 | Membuat aplikasi berfungsi 53 | Aplikasi DontKillMyApp resmi ada di sini - membuat aplikasi akhirnya berfungsi dengan baik meskipun Anda tidak memiliki Pixel. 54 | 55 | Membantu Anda mengatur tugas latar belakang ponsel sehingga aplikasi Anda akhirnya dapat bekerja untuk ANDA, bahkan saat Anda tidak melihat layar Anda. 56 | 57 | Lihat bagaimana ponsel Anda bekerja dan menguji pengaturan yang berbeda dengan benchmark DontKillMyApp. 58 | 59 | Fitur: 60 | • Tolok ukur DKMA: Mengukur seberapa agresif ponsel Anda mematikan aplikasi yang berjalan di latar belakang 61 | • Panduan: Dapatkan langkah-langkah yang dapat ditindaklanjuti untuk mengatasi sebagian besar pembatasan proses latar belakang 62 | • Lakukan perubahan: ️Bantu ponsel cerdas tetap pintar dengan membagikan laporan tolok ukur Anda ke dontkillmyapp.com 63 | 64 | DontKillMyApp adalah alat tolok ukur untuk melihat seberapa baik ponsel Anda mendukung pemrosesan latar belakang. Anda dapat mengukur sebelum mengatur telepon Anda, kemudian membaca panduan pengaturan dan mengukur lagi untuk melihat seberapa banyak telepon Anda kendur di latar belakang. 65 | 66 | Anda dapat membagikan laporan Anda melalui aplikasi ke pengelola situs web dontkillmyapp.com yang menyusunnya dan mendasarkan keseluruhan skor negatif berdasarkan data tersebut. 67 | 68 | Bagaimana cara kerja benchmark? (Teknis!) 69 | 70 | Aplikasi memulai layanan latar depan dengan penguncian layar saat bangun dan menjadwalkan tugas berulang pada thread utama, pelaksana thread kustom, dan menjadwalkan alarm reguler (AlarmManager.setExactAndAllowWhileIdle). Kemudian menghitung perbandingan antara yang dieksekusi vs. diharapkan. Itu saja! 71 | 72 | Untuk lebih jelasnya, silakan periksa kodenya. Aplikasi ini open source, tersedia di https://github.com/urbandroid-team/dontkillmy-app 73 | 74 | Terima kasih spesial kepada Doki (github.com/doubledotlabs/doki). 75 | Biarkan penjadwalan alarm yang tepat 76 | TOLONG TUNJUKKAN KAMI UNTUK MENJUCTUKAN ALARM yang tepat untuk menguji pemrosesan latar belakang berbasis alarm perangkat Yoru dengan benar. 77 | Ada yang salah. 78 | Benchmark sedang berjalan 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Mulai benchmark 6 | Hentikan benchmark 7 | Benchmark 8 | Benchmark sedang berlangsung (%1$s - %2$s) ketuk untuk menghentikan. 9 | Benchmark telah selesai, ketuk untuk melihat hasilnya 10 | Pembandingan telah berlangsung 11 | Hentikan 12 | Bersihkan 13 | Bekerja 14 | Alarm 15 | Utama 16 | Bagikan 17 | Bagikan dengan/via 18 | Laporan 19 | Durasi 20 | Peringatan 21 | Jangan isi daya dan jangan gunakan ponsel anda selama proses sedang berlangsung 22 | Batal 23 | OK 24 | Total 25 | 26 | 1 jam 27 | 2 jam 28 | 3 jam 29 | 4 jam 30 | 5 jam 31 | 6 jam 32 | 7 jam 33 | 8 jam 34 | 35 | 36 | DontKillMyApp.com 37 | Surel 38 | Lainnya 39 | 40 | Cara kerja 41 | Pengukuran memulai layanan latar depan dengan penguncian layar saat bangun dan menjadwalkan tugas berulang di thread utama (setiap 10 detik), eksekutor thread kustom (setiap 10 detik), dan menjadwalkan alarm reguler menggunakan AlarmManager.setExactAndAllowWhileIdle (setiap 10 menit). Kemudian ia menghitung skor dengan membandingkan yang dieksekusi dengan yang diharapkan. \n\nSkor yang mendekati 100% adalah hasil yang baik - pengoptimalan baterai non-standar tidak diterapkan pada saat itu. Namun, ide yang bagus untuk mengulang pengujian dalam seminggu karena beberapa OEM mungkin menerapkan batasan ke aplikasi yang tidak digunakan untuk sementara waktu.\n\nGrafik\n\nSetiap baris dalam grafik mewakili 5 menit. Idealnya Anda melihat 30 lingkaran dan segitiga di setiap baris dan satu persegi di setiap baris kedua. Wilayah ruang kosong yang lebih luas menunjukkan adanya masalah - aplikasi Anda mungkin tidak berfungsi sebagaimana mestinya jika Anda tidak akan mengubah setelan ponsel.\n\n\ Untuk detail selengkapnya, periksa kode aplikasi di https://github.com/ urbandroid-team/dontkillmy-app 42 | Hubungi dukungan 43 | Beritahukan kepada yang lain 44 | Benchmark DontKillMyApp memeriksa pemrosesan latar belakang ponsel Anda untuk membuat aplikasi di ponsel Anda bekerja dengan baik.\n\nhttps://play.google.com/store/apps/details?Id=com.urbandroid.dontkillmyapp 45 | Mohon beri kami bintang! 46 | Beri Nilai 47 | Jangan pernah 48 | Nanti 49 | Kode sumber 50 | Kami ingin membuat aplikasi berfungsi bahkan pada ponsel yang produsennya lebih menyukai baterai daripada fungsionalitas.\n\nCara terbaik untuk membantu proyek ini agar terlihat adalah dengan menilai dan mengomentari alat gratis dan sumber terbuka ini di Play Store.\n\nTerima kasih banyak untuk membantu kami membuat ekosistem Android menjadi tempat yang lebih baik! 51 | Bantu untuk menerjemahkan aplikasi ini 52 | Membuat aplikasi berfungsi 53 | Aplikasi DontKillMyApp resmi ada di sini - membuat aplikasi akhirnya berfungsi dengan baik meskipun Anda tidak memiliki Pixel. 54 | 55 | Membantu Anda mengatur tugas latar belakang ponsel sehingga aplikasi Anda akhirnya dapat bekerja untuk ANDA, bahkan saat Anda tidak melihat layar Anda. 56 | 57 | Lihat bagaimana ponsel Anda bekerja dan menguji pengaturan yang berbeda dengan benchmark DontKillMyApp. 58 | 59 | Fitur: 60 | • Tolok ukur DKMA: Mengukur seberapa agresif ponsel Anda mematikan aplikasi yang berjalan di latar belakang 61 | • Panduan: Dapatkan langkah-langkah yang dapat ditindaklanjuti untuk mengatasi sebagian besar pembatasan proses latar belakang 62 | • Lakukan perubahan: ️Bantu ponsel cerdas tetap pintar dengan membagikan laporan tolok ukur Anda ke dontkillmyapp.com 63 | 64 | DontKillMyApp adalah alat tolok ukur untuk melihat seberapa baik ponsel Anda mendukung pemrosesan latar belakang. Anda dapat mengukur sebelum mengatur telepon Anda, kemudian membaca panduan pengaturan dan mengukur lagi untuk melihat seberapa banyak telepon Anda kendur di latar belakang. 65 | 66 | Anda dapat membagikan laporan Anda melalui aplikasi ke pengelola situs web dontkillmyapp.com yang menyusunnya dan mendasarkan keseluruhan skor negatif berdasarkan data tersebut. 67 | 68 | Bagaimana cara kerja benchmark? (Teknis!) 69 | 70 | Aplikasi memulai layanan latar depan dengan penguncian layar saat bangun dan menjadwalkan tugas berulang pada thread utama, pelaksana thread kustom, dan menjadwalkan alarm reguler (AlarmManager.setExactAndAllowWhileIdle). Kemudian menghitung perbandingan antara yang dieksekusi vs. diharapkan. Itu saja! 71 | 72 | Untuk lebih jelasnya, silakan periksa kodenya. Aplikasi ini open source, tersedia di https://github.com/urbandroid-team/dontkillmy-app 73 | 74 | Terima kasih spesial kepada Doki (github.com/doubledotlabs/doki). 75 | Biarkan penjadwalan alarm yang tepat 76 | TOLONG TUNJUKKAN KAMI UNTUK MENJUCTUKAN ALARM yang tepat untuk menguji pemrosesan latar belakang berbasis alarm perangkat Yoru dengan benar. 77 | Ada yang salah. 78 | Benchmark sedang berjalan 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-it/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Inizio test 6 | Stop test 7 | Test 8 | Test in esecuzione (%1$s - %2$s) clicca qui per interromperlo. 9 | Test finito, clicca qui per i risultati 10 | Test ancora in esecuzione 11 | Stop 12 | Pulisci 13 | Lavoro 14 | Allarme 15 | Principale 16 | Condividi 17 | Condividi con 18 | Segnala 19 | Durata 20 | Attenzione 21 | Cerca di non ricaricare la batteria del tuo telefono e di non utilizzarlo durante l\'intero test. 22 | Cancella 23 | OK 24 | Totale 25 | 26 | 1 ora 27 | 2 ore 28 | 3 ore 29 | 4 ore 30 | 5 ore 31 | 6 ore 32 | 7 ore 33 | 8 ore 34 | 35 | 36 | DontKillMyApp.com 37 | Email 38 | Altro 39 | 40 | Come funziona 41 | Il benchmark avvia un servizio in primo piano con un wakelock e pianifica attività ripetitive sul thread principale (ogni 10 secondi), un esecutore di thread personalizzato (ogni 10 secondi) e pianifica allarmi regolari utilizzando AlarmManager.setExactAndAllowWhileIdle (ogni 10 minuti). Quindi calcola il punteggio confrontando i risultati eseguiti e quelli previsti. \n\n I punteggi vicini al 100% sono buoni risultati - al momento non vengono applicate ottimizzazioni della batteria non standard. E\' bene ripetere il test entro una settimana poiché alcuni OEM potrebbero applicare limiti alle app che non vengono utilizzate da un po \'. \n\nGRAFICO\n\nOgni riga del grafico rappresenta 5 minuti. Idealmente vedi 30 cerchi e triangoli su ogni linea e un quadrato su ogni seconda linea. Le aree con più spazi vuoti indicano un problema: le tue app potrebbero non funzionare come previsto se non modifichi le impostazioni del telefono. \n\n\Per maggiori dettagli controlla il codice delle app su https://github.com/urbandroid-team/dontkillmy-app 42 | Contatta il supporto 43 | Dillo agli altri 44 | DontKillMyApp Benchmark controlla i processi in background del tuo telefono per far funzionare correttamente le app del tuo telefono.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Per favore, valutaci! 46 | Valuta 47 | Mai 48 | Più tardi 49 | Codice sorgente 50 | Vogliamo che le app funzionino anche sui telefoni i cui produttori preferiscono la durata della batteria alle funzionalità.\n\nIl modo migliore per rendere visibile questo progetto è valutare e commentare questo strumento gratuito e open source sul Play Store.\n\nGrazie mille per averci aiutato a rendere l\'ecosistema Android un posto migliore! 51 | Aiuta a tradurre l\'app 52 | Fai funzionare le app 53 | L\'app ufficiale di DontKillMyApp è qui - finalmente le app funzionano correttamente anche se non possiedi un Pixel. 54 | 55 | Ti aiuta a configurare le attività in background del tuo telefono in modo che le tue app possano finalmente funzionare per TE anche quando il tuo schermo è spento. 56 | 57 | Guarda come sta il tuo telefono e prova diverse impostazioni con il benchmark di DontKillMyApp. 58 | 59 | Caratteristiche: 60 | • Benchmark DKMA: misura quanto è aggressivo il tuo telefono nel terminare le app in background 61 | • Guide: ottieni passaggi attuabili per superare la maggior parte delle limitazioni dei processi in background 62 | • Apporta una modifica: ️aiuta gli smartphone a rimanere intelligenti condividendo il tuo rapporto di benchmark su dontkillmyapp.com 63 | 64 | DontKillMyApp è uno strumento di benchmark per vedere quanto bene il tuo telefono supporta l\'elaborazione in background. È possibile fare il benchmark prima di configurare il telefono, quindi consultare nuovamente le guide di configurazione e il benchmark per vedere quanto il telefono è intervenuto nel terminare i processi dell\'app in background. 65 | 66 | Puoi condividere il tuo report tramite l\'app con i manutentori del sito web dontkillmyapp.com che lo compilano e basano su di esso il punteggio negativo complessivo. 67 | 68 | Come funziona il benchmark? (Tecnico!) 69 | 70 | L\'app avvia un servizio in primo piano con un wakelock e pianifica attività ripetitive sul thread principale, un esecutore di thread personalizzato e pianifica allarmi regolari (AlarmManager.setExactAndAllowWhileIdle). Quindi confronta eseguito rispetto a previsto. Questo è tutto! 71 | 72 | Per maggiori dettagli controlla il codice. L\'app è open source disponibile https://github.com/urbandroid-team/dontkillmy-app 73 | 74 | Un ringraziamento speciale a Doki (github.com/doubledotlabs/doki). 75 | Consenti la pianificazione esatta degli allarmi 76 | Permettici di pianificare gli allarmi esatti per testare correttamente l\'elaborazione di background basata su allarmi Yoru. 77 | Qualcosa è andato storto. 78 | Il benchmark è in esecuzione 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ドント・キル・マイ・アプリ 4 | DKMA 5 | テスト開始 6 | テスト終了 7 | ベンチマーク 8 | テスト中 (%1$s - %2$s) タップすると終了します。 9 | テスト完了、タップすると結果が表示されます 10 | テストを開始しました 11 | 終了する 12 | 消去する 13 | ウォーク 14 | アラーム 15 | メイン 16 | シェアー 17 | 共有する 18 | 報告する 19 | テスト時間 20 | !警告! 21 | テスト中は、端末の充電や使用はご遠慮ください。 22 | キャンセル 23 | オーケー 24 | 総計 25 | 26 | 一時間 27 | 二時間 28 | 三時間 29 | 四時間 30 | 五時間 31 | 六時間 32 | 七時間 33 | 八時間 34 | 35 | 36 | ドント・キル・マイ・アプリ!Don\'t kill my app! 37 | メール 38 | その他 39 | 40 | 原理説明 41 | ベンチマークテストでは、主要スレッドと自作スレッドで10秒ごとに常態作業を実行し、AlarmManager.setExactAndAllowWhileIdle()を使って10分ごとに通知するような、先制型のフロントエンド・サービスを起動します。計算結果は、実行時間と予想時間を比較し、得点を算出します。 \n\n 100が最高点、標準以外のバッテリー最適化は現状不可。ですが、端末製造会社によっては、一定期間使用しないアプリを制限する場合がありますので、週1回の再検査をお勧めします。 \n\n 丸と三角は1行に30個、四角は2行に1個表示されるのが最適です。 空白部分が広いほど問題があり、端末の設定を変更しないとアプリが正常に機能しない場合があります。 \n\n 詳細については、https://github.com/urbandroid-team/dontkillmy-app でアプリのコードをご参照ください。 42 | 支援センター 43 | 他の人と共有する 44 | 端末のアプリが正常に動作するように、端末のバックグラウンド処理をチェックする「ドント・キル・マイ・アプリ!ベンチマーク|DKMA Benchmark」。 \n\n https://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | 評価お願いします。 46 | 評価する 47 | もう通知されない 48 | 後で通知される 49 | オリジナル・コード 50 | 機能よりも寿命が大事という製造者の考え方もあるとはいえ、アプリは正常に機能さ せたいと考えています。\n\n プレイストアでのアプリの評価にご協力いただくことは、このオープンソース・プロジェクトの公開を増やすための最良の方法です。\n\n アンドロイドの環境改善にご協力いただいた皆様、本当にありがとうございました。 51 | このアプリの翻訳に協力する 52 | アプリを機能させる 53 | 「ドント・キル・マイ・アプリの公式アプリはこちら - Pixelを使っていなくても、アプリを再開することができます。 54 | 55 | 端末を背景で機能するように設定しておけば、アプリが助けてくれるはずです 画面を見つめていないときでも 56 | 57 | さて、DontKillMyAppテストで、端末の状態を確認し、様々な設定を試してみてください。 58 | 59 | 特別な機能 60 | - DKMAベンチマークテスト。 端末がバックエンド・アプリをどれだけ積極的に終了させるかを測定します。 61 | - ご案内です。 バックエンドの進捗制限のほとんどを解決するための実行可能な手引きをご覧ください。 62 | -改善する:️ベンチマーク結果をdontkillmyapp.comで共有し、端末の性能を維持することができます。 63 | 64 | ドント・キル・マイ・アプリは、お使いの端末がバックエンド処理にどの程度対応しているかを確認できるベンチマーク・ツールです。 設定前に端末を測定し、設定案内を見ながら再度ベンチマークを行うことで、端末がどの程度バックエンドでたるんでいるかを確認することができます。 65 | 66 | また、アプリを通じてdontkillmyapp.comのサイト管理者に報告すると、管理者がその報告を集計し、それに基づき全体の負点を算出することができます。 67 | 68 | テストはどんな方法で行うのですか? (技術的に!) 69 | 70 | アプリは、待機中のロックでフロントエンドの機能を起動し、主要スレッドで繰り返し作業を予定し、自作スレッド・エクゼキュータを予定し、定期的に通知を予定します (AlarmManager.setExactAndAllowWhileIdle). そして、その実行内容と期待値を計算する。 71 | 72 | 詳しくはコードをご覧ください。 このアプリはオープンソースで、https://github.com/urbandroid-team/dontkillmy-app で公開されています。 73 | 74 | Doki (github.com/doubledotlabs/doki) に特別な感謝を捧げます。" 75 | 正確なアラームスケジューリングを許可します 76 | 正確なアラームをスケジュールして、Yoruデバイスアラームベースの背景処理を適切にテストしてください。 77 | 何かがうまくいかなかった。 78 | ベンチマークが実行されています 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-night-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #FFFFFF 5 | @android:color/system_accent1_300 6 | @android:color/system_accent1_500 7 | @android:color/system_accent2_500 8 | @android:color/system_neutral1_900 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #ba68c8 5 | #9c27b0 6 | #ba68c8 7 | #1e1e1e 8 | 9 | 10 | #ffffffff 11 | #ffffffff 12 | #b2ffffff 13 | #54ffffff 14 | #1effffff 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-nl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Start de evaluatie 6 | Stop de evaluatie 7 | Evaluatie 8 | Evaluatie loopt (%1$s - %2$s) klik om te stoppen. 9 | Evaluatie is gestopt,klik voor het resultaat 10 | De evaluatie loopt al 11 | Stop 12 | Wis 13 | Werk 14 | Alarm 15 | Totaal 16 | Deel 17 | Deel met 18 | Rapporteer 19 | Duur 20 | Waarschuwing 21 | Gelieve de telefoon niet in de oplader te laten en gebruik de telefoon niet gedurende de evaluatietest. 22 | Afbreken 23 | OK 24 | Totaal 25 | 26 | 1 uur 27 | 2 uur 28 | 3 uur 29 | 4 uur 30 | 5 uur 31 | 6 uur 32 | 7 uur 33 | 8 uur 34 | 35 | 36 | DontKillMyApp.com 37 | E-mail 38 | Anders 39 | 40 | Hoe werkt het 41 | Contacteer helpdesk 42 | Vertel het anderen 43 | DontKillMyApp Benchmark controleert de achtergrondprocessen van uw telefoon om de apps goed te laten werken.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 44 | Beoordeel ons aub! 45 | Beoordeel 46 | Nooit 47 | Later 48 | Broncode 49 | Ons doel is om uw apps te laten werken. Zelfs als de telefoonfabrikant belangrijker vinden om de batterij te sparen ten koste van de functionaliteit.\n\nDe beste manier om ons te helpen is om ons te beoordelen in de Playstore.\n\nHeel hartelijk dank om het Android platform beter te maken. 50 | Help ons om de app te vertalen. 51 | Maak apps werkend 52 | De officiele DontKillMyApp app is gearriveerd – Maakt apps eindelijk werkend, zelfs als je geen Pixel hebt. 53 | 54 | Helpt om de achtergrond taken in te stellen zodat je apps eindelijk werken, zelfs als je niet op je scherm kijkt. 55 | 56 | Bekijk hoe je telefoon het doet en test verschillende instellingen met de DontKillMyApp Benchmark. 57 | 58 | Eigenschappen: 59 | • DKMA benchmark: Meet hoe aggressief de telefoon achtergrondprocessen stopt. Apps 60 | • Ondersteund: Geeft stappen om de meest voorkomende restricties van de achtergrondprocessen aan te passen. 61 | • Help mee: Help mee om smartphones slim te laten blijven om de evaluaties op te sturen naar dontkillmyapp.com 62 | 63 | DontKillMyApp doet metingen om te kijken hoe goed de telefoon het doet in de ondersteuning van de achtergrondprocessen. 64 | 65 | Doe een meting voordat je de telefooninstellingen aanpast. Dan ga door het stappenplan om te zien hoeveel je achtergrondprocessen vertragen. 66 | 67 | Je kan de resultaten delen met de ontwikkelaars een algemene score berekenen en daarmee de negatieve score bepalen. 68 | 69 | Hoe werkt de evaluatie? (Technisch!) 70 | De app start een voorgrondprocess service met een wakker worden lock en plant een herhalende taak op het hoofdproces, een aangepaste custom thread executer, en plant regelmatig alarmeringen(AlarmManager.setExactAndAllowWhileIdle). Dan rekent hij uitgevoerde versus verwachte resultaten.Zo simpel is het. 71 | 72 | Voor meer detail zie de broncode. De app is opensource en beschikbaar op https://github.com/urbandroid-team/dontkillmy-app 73 | 74 | Speciale dank voor Doki (github.com/doubledotlabs/doki). 75 | Sta exacte alarmplanning toe 76 | Staat u toe om exacte alarmen te plannen om Yoru-apparaat gebaseerde achtergrondverwerking correct te testen. 77 | Er is iets fout gegaan. 78 | Benchmark is actief 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Rozpocznij benchmark 6 | Zatrzymaj benchmark 7 | Benchmark 8 | Benchmark trwa (%1$s - %2$s). Naciśnij by zatrzymać 9 | Benchmark zakończony, naciśnij by zobaczyć rezultaty 10 | Benchmark już trwa... 11 | Zatrzymaj 12 | Wyczyść 13 | Praca 14 | Alarm 15 | Główny 16 | Udostępnij 17 | Udostępnij przez 18 | Zgłoś 19 | Czas trwania 20 | Ostrzeżenie 21 | Nie podłączaj telefonu do ładowania i staraj się go nie używać podczas całości trwania benchmarku. 22 | Anuluj 23 | OK 24 | Razem 25 | 26 | 1 godzina 27 | 2 godziny 28 | 3 godziny 29 | 4 godziny 30 | 5 godzin 31 | 6 godzin 32 | 7 godzin 33 | 8 godzin 34 | 35 | 36 | DontKillMyApp.com 37 | Email 38 | Inne 39 | 40 | Jak to działa 41 | Benchmark startuje jako pierwszoplanowy serwis z blokadą wybudzenia i wykonuje powtarzające się zadania w głównym wątku (co 10 s.), na niestandardowym wykonawcy wątku (co 10 s.) i ustawia zwykłe budziki używając AlarmManager.setExactAndAllowWhileIdle (co 10 min.). Następnie, oblicza wynik poprzez porównanie ilości zadań wykonanych z ilością oczekiwaną. \n\nWyniki blisko 100% są dobrymi wynikami - niestandardowe optymalizacje baterii są wyłączone. Aczkolwiek, dobrze jest powtarzać test co tydzień, ponieważ niektóre OEM\'y mogą nakładać limity na aplikacje które nie są często używane. \n\nWYKRES\n\nKażdy wiersz w wykresie reprezentuje 5 minut testu. Zobaczysz 30 kółek i trójkątów na każdej linii, oraz jeden kwadrat na co drugiej linii. Miejsca, w których znajduje się większa ilość białej przestrzeni przedstawiają problem - twoje aplikacje mogą przestać działać, jeśli nie zmienisz ustawień swojego telefonu. \n\n\Po więcej informacji sprawdź kod aplikacji wchodzą na stronę: https://github.com/urbandroid-team/dontkillmy-app 42 | Kontakt ze wsparciem 43 | Powiedz innym 44 | DontKillMyApp Benchmark sprawdza przetwarzanie w tle, aby aplikacje na telefonie działały poprawnie.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Prosimy oceń naszą aplikację! 46 | Oceń teraz 47 | Nigdy 48 | Później 49 | Kod źródłowy 50 | Chcemy, by aplikacje działały nawet na telefonach, gdzie producenci stawiają baterię nad funkcjonalnością.\n\nNajlepszy sposób, w jaki możesz wspomóc ten projekt, to dodanie opinii o tej darmowej i otwartoźródłowej aplikacji w Sklepie Play.\n\nWielkie dzięki za pomoc w tworzeniu ekosystemu Androida lepszym miejscem! 51 | Pomóż przetłumaczyć aplikację 52 | Spraw, by aplikacje działały 53 | Oficjalna aplikacja DontKillMyApp już tu jest - spraw, aby aplikacje w końcu działały poprawnie, nawet jeśli nie masz Pixel\'a. 54 | 55 | Pomaga ustawić zadania w tle tak, aby twoje aplikacje działały dla CIEBIE, nawet jeśli nie używasz swojego telefonu. 56 | 57 | Zobacz jak działa Twój telefon i przetestuj różne ustawienia poprzez benchmark w aplikacji DontKillMyApp. 58 | 59 | Funkcje: 60 | • Benchmark DKMA: Sprawdź jak agresywnie twój telefon \'zabija\' procesy w tle 61 | • Poradniki: Uzyskaj wykonywalne kroki, do pokonania większość restrykcji dla procesów w tle 62 | • Zrób zmianę:️ Pomóż smartfonom zostać smart poprzez udostępnienie swojego benchmarku na stronie dontkillmyapp.com 63 | 64 | DontKillMyApp jest narzędziem do benchmarków. Pozwala na zobaczenie jak dobrze twój telefon wspiera procesy w tle. Możesz sprawdzić, jak twój telefon wypadnie przed zastosowaniem własnych ustawień, a następnie ustawić swój telefon i przeprowadzić benchmark ponownie. 65 | 66 | Możesz udostępnić swój raport poprzez aplikacje do właścicieli strony dontkillmyapp.com, którzy go skompilują i oprą na nim ogólny negatywny wynik. 67 | 68 | Jak działa benchmark? 69 | (Techniczne!) 70 | 71 | Aplikacja startuje jako pierwszoplanowy serwis z blokadą budzenia i planuje powtarzające się zadania na głównym wątku, na niestandardowym wykonawcy wątku i ustawia zwykłe budziki (AlarmManager.setExactAndAllowWhileIdle). Następnie, oblicza wynik poprzez porównanie wykonanego z oczekiwanym wynikiem. To wszystko! 72 | 73 | Po więcej szczegółów sprawdź kod aplikacji. Aplikacja ma otwarte źródło dostępne na stronie https://github.com/urbandroid-team/dontkillmy-app 74 | Specjalne podziękowania dla Doki (github.com/doubledotlabs/doki). 75 | Zezwalaj na dokładne planowanie alarmów 76 | Pozwól nam zaplanować dokładne alarmy, aby właściwie przetestować przetwarzanie tła oparte na alarmach Joru. 77 | Coś poszło nie tak. 78 | Benchmark działa 79 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt-rBR/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontkillMyApp 4 | DKMA 5 | Iniciar o processo 6 | Parar o processo 7 | Benchmark 8 | Teste de referência em execução (%1$s - %2$s) toque para parar. 9 | Benchmark finalizado, toque para ver os resultados 10 | O processo já está em execução 11 | Parar 12 | Limpar 13 | Trabalhos 14 | Alarme 15 | Principal 16 | Compartilhar 17 | Compartilhar com 18 | Relatório 19 | Duração 20 | Atenção 21 | Por favor mantenha seu celular fora do carregador e tente não usá-lo durante o processo. 22 | Cancelar 23 | Ok 24 | Total 25 | 26 | 1 hora 27 | 2 horas 28 | 3 horas 29 | 4 horas 30 | 5 horas 31 | 6 horas 32 | 7 horas 33 | 8 horas 34 | 35 | 36 | DontkillMyApp.com 37 | E-mail 38 | Outro 39 | 40 | Como funciona 41 | O benchmark inicia um serviço de primeiro plano com um wake lock e horário de tarefas repetitivas no thread principal (a cada 10s), um executor de thread personalizado (a cada 10s) e horários de alarmes regulares usando AlarmManager.setExactAndAllowWhileIdle (a cada 10 minutos). Em seguida, ele calcula os resultados comparando os executados com os esperados.\n\nOs escores próximos a 100% são bons resultados - otimizações de bateria não padrão não são aplicadas no momento. Embora seja bom repetir o teste em uma semana, pois alguns OEMs podem aplicar limites a aplicativos que não são usados ​​por um tempo.\n\nO GRÁFICO\n\nCada linha no gráfico representa 5 minutos. Idealmente, você vê 30 círculos e triângulos em cada linha e um quadrado a cada segunda linha. Regiões maiores de espaço em branco indicam um problema - seus aplicativos podem não funcionar como pretendido se você não alterar as configurações do telefone.\n\n\ Para obter mais detalhes, verifique o código dos aplicativos em https://github.com/urbandroid-team/dontkillmy-app 42 | Entrar em contato 43 | Conte para os outros 44 | O DontKillMyApp Benchmark verifica o processamento em segundo plano do telefone para fazer os aplicativos funcionarem corretamente. \ N \ nhttps: //play.google.com/store/apps/details? Id = com.urbandroid.dontkillmyapp 45 | Por favor, deixe sua avaliação. 46 | Avaliar 47 | Nunca 48 | Depois 49 | Código=fonte 50 | Queremos que os aplicativos funcionem mesmo em telefones cujos fabricantes preferem bateria em vez de funcionalidade.\n\nA melhor maneira de ajudar a tornar este projeto visível é avaliar e comentar esta ferramenta gratuita e de código aberto na Play Store. \n\nMuito obrigado. por nos ajudar a tornar o ecossistema Android um lugar melhor! 51 | Ajude-nos a traduzir o app 52 | Faça os aplicativos funcionarem 53 | O aplicativo oficial DontKillMyApp está aqui - faça os aplicativos finalmente funcionarem corretamente, mesmo se você não tiver um Pixel. 54 | 55 | Ajuda a configurar as tarefas em segundo plano do telefone para que seus aplicativos possam finalmente funcionar para VOCÊ, mesmo quando não estiver olhando para a tela. 56 | 57 | Veja como está o seu telefone e teste diferentes configurações com o benchmark DontKillMyApp. 58 | 59 | Características: 60 | • Referência DKMA: meça a agressividade do seu telefone, matando os aplicativos de fundo 61 | • Guias: obtenha etapas acionáveis ​​para superar a maioria das restrições de processo em segundo plano 62 | • Faça uma mudança: ️Ajude os smartphones a ficarem inteligentes compartilhando seu relatório de benchmark com dontkillmyapp.com 63 | 64 | DontKillMyApp é uma ferramenta de referência para ver se o seu telefone suporta o processamento em segundo plano. Você pode medir antes de configurar seu telefone, depois seguir os guias de configuração e comparar novamente para ver o quanto seu telefone está relaxando em segundo plano. 65 | 66 | Você pode compartilhar seu relatório por meio do aplicativo com os mantenedores do site dontkillmyapp.com que o compilam e baseiam a pontuação negativa geral nele. 67 | 68 | Como funciona o benchmark? (Técnico!) 69 | 70 | O aplicativo inicia um serviço de primeiro plano com um wake lock e horários de tarefas repetitivas no thread principal, um executor de thread personalizado e horários de alarmes regulares (AlarmManager.setExactAndAllowWhileIdle). Em seguida, ele calcula executado vs.esperado. É isso! 71 | 72 | Para mais detalhes verifique o código. O aplicativo é de código aberto disponível em https://github.com/urbandroid-team/dontkillmy-app 73 | Agradecimentos especiais a Doki (github.com/doubledotlabs/doki). 74 | Permitir agendamento exato de alarme 75 | Permita-nos agendar alarmes exatos para testar corretamente o processamento de fundo baseado em alarme do dispositivo YORU. 76 | Ops, algo quando errado. 77 | O benchmark está em execução 78 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Iniciar benchmark 6 | Parar benchmark 7 | Benchmark 8 | Executando teste (%1$s - %2$s2) toque para finalizar. 9 | O benchmark foi finalizado, toque para ver os resultados 10 | Ainda está em execução 11 | Parar 12 | Limpar 13 | Trabalhando 14 | Alarme 15 | Principal 16 | Compartilhar 17 | Compartilhar com 18 | Reportar 19 | Duração 20 | Atenção 21 | Por favor mantenha seu telemóvel desconectado do carregador e não tente usá-lo até que o teste finalize. 22 | Cancelar 23 | OK 24 | Total 25 | 26 | 1 hora 27 | 2 horas 28 | 3 horas 29 | 4 horas 30 | 5 horas 31 | 6 horas 32 | 7 horas 33 | 8 horas 34 | 35 | 36 | DontKillMyApp.com 37 | Email 38 | Outro 39 | 40 | Como funciona 41 | O benchmark inicia um serviço de primeiro plano com um wake lock e horário de tarefas repetitivas no thread principal (a cada 10s), um executor de thread personalizado (a cada 10s) e horários de alarmes regulares usando AlarmManager.setExactAndAllowWhileIdle (a cada 10 minutos). Em seguida, ele calcula os resultados comparando os executados com os esperados.\n\nOs escores próximos a 100% são bons resultados - otimizações de bateria não padrão não são aplicadas no momento. Embora seja bom repetir o teste em uma semana, pois alguns OEMs podem aplicar limites a aplicativos que não são usados ​​por um tempo.\n\nO GRÁFICO\n\nCada linha no gráfico representa 5 minutos. Idealmente, você vê 30 círculos e triângulos em cada linha e um quadrado a cada segunda linha. Regiões maiores de espaço em branco indicam um problema - seus aplicativos podem não funcionar como pretendido se você não alterar as configurações do telefone.\n\n\ Para obter mais detalhes, verifique o código dos aplicativos em https://github.com/urbandroid-team/dontkillmy-app 42 | Contactar suporte 43 | Contacte outros 44 | O DontKillMyApp Benchmark verifica o processamento em segundo plano do telefone para fazer os aplicativos funcionarem corretamente. \ N \ nhttps: //play.google.com/store/apps/details? Id = com.urbandroid.dontkillmyapp 45 | Por favor, nós avalie! 46 | Avaliar 47 | Nunca 48 | Mais tarde 49 | Código fonte 50 | Queremos que os aplicativos funcionem mesmo em telefones cujos fabricantes preferem bateria em vez de funcionalidade.\n\nA melhor maneira de ajudar a tornar este projeto visível é avaliar e comentar esta ferramenta gratuita e de código aberto na Play Store. \n\nMuito obrigado. por nos ajudar a tornar o ecossistema Android um lugar melhor! 51 | Ajude a traduzir o aplicativo 52 | Lema 53 | O aplicativo oficial DontKillMyApp está aqui - faça os aplicativos finalmente funcionarem corretamente, mesmo se você não tiver um Pixel. 54 | 55 | Ajuda a configurar as tarefas em segundo plano do telefone para que seus aplicativos possam finalmente funcionar para VOCÊ, mesmo quando não estiver olhando para a tela. 56 | 57 | Veja como está o seu telefone e teste diferentes configurações com o benchmark DontKillMyApp. 58 | 59 | Características: 60 | • Referência DKMA: meça a agressividade do seu telefone, matando os aplicativos de fundo 61 | • Guias: obtenha etapas acionáveis ​​para superar a maioria das restrições de processo em segundo plano 62 | • Faça uma mudança: ️Ajude os smartphones a ficarem inteligentes compartilhando seu relatório de benchmark com dontkillmyapp.com 63 | 64 | DontKillMyApp é uma ferramenta de referência para ver se o seu telefone suporta o processamento em segundo plano. Você pode medir antes de configurar seu telefone, depois seguir os guias de configuração e comparar novamente para ver o quanto seu telefone está relaxando em segundo plano. 65 | 66 | Você pode compartilhar seu relatório por meio do aplicativo com os mantenedores do site dontkillmyapp.com que o compilam e baseiam a pontuação negativa geral nele. 67 | 68 | Como funciona o benchmark? (Técnico!) 69 | 70 | O aplicativo inicia um serviço de primeiro plano com um wake lock e horários de tarefas repetitivas no thread principal, um executor de thread personalizado e horários de alarmes regulares (AlarmManager.setExactAndAllowWhileIdle). Em seguida, ele calcula executado vs.esperado. É isso! 71 | 72 | Para mais detalhes verifique o código. O aplicativo é de código aberto disponível em https://github.com/urbandroid-team/dontkillmy-app 73 | Agradecimentos especiais a Doki (github.com/doubledotlabs/doki). 74 | Permitir agendamento exato de alarme 75 | Permita-nos agendar alarmes exatos para testar corretamente o processamento de fundo baseado em alarme do dispositivo YORU. 76 | Ops, algo quando errado. 77 | O benchmark está em execução 78 | -------------------------------------------------------------------------------- /app/src/main/res/values-ro/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Porneşte testul 6 | Opreşte testul 7 | Testează 8 | Testul rulează (%1$s - %2$s) atinge pentru al opri. 9 | Testul s-a terminat, atinge pentru rezultate 10 | Testul deja rulează 11 | Stop 12 | Lucrează 13 | Principal 14 | Distribuie 15 | Distribuie către 16 | Raportează 17 | Durata 18 | Atenţie 19 | Vă rugăm să nu ţineţi telefonul conectat la încărcător şi încercaţi să nu îl folosiţi pe toată durata testului. 20 | Anulare 21 | OK 22 | Total 23 | 24 | 1 oră 25 | 2 ore 26 | 3 ore 27 | 4 ore 28 | 5 ore 29 | 6 ore 30 | 7 ore 31 | 8 ore 32 | 33 | 34 | DontKillMyApp.com 35 | Email 36 | Altele 37 | 38 | Cum funcţionează 39 | Acest test porneşte un serviciu care ar trebui să ruleze permanent şi foloseşte nişte sarcini repetitive principale (la fiecare 10 s), o sarcină specifică (la fiecare 10 s) şi programează alarme regulate folosind AlarmManager.setExactAndAllowWhileIdle (la fiecare 10 min). Apoi calculează punctajul prin compararea sarcinilor efectuate faţă de cele programate.\n\nPunctaje apropiate de 100% sunt bune – ceea ce înseamnă că optimizarea bateriei nu este aplicată în acel moment. Totuşi este bine să repetaţi testul săptămânal, deoarece unele sisteme de operare pot aplica limitări aplicaţiilor care nu sunt folosite frecvent.\n\nGRAFICUL\n\nFiecare rând al graficului reprezintă 5 minute. Ar trebui să fie 30 de cercuri şi triunghiuri pe fiecare linie şi un pătrat la fiecare 2 linii. Zonele libere arată o problemă – aplicaţiile dvs. s-ar putea să nu funcţioneze cum ar trebui dacă nu schimbaţi setările telefonului.\n\nPentru mai multe detalii consultaţi codul sursă al aplicaţiei la adresa https://github.com/urbandroid-team/dontkillmy-app 40 | Cereţi ajutor 41 | Spuneţi şi altora 42 | Testul DontKillMyApp verifică funcţionarea în fundal a aplicaţiilor pentru a le face să funcţioneze corespunzător.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 43 | Vă rugăm să apreciaţi aplicaţia! 44 | Acum 45 | Niciodată 46 | Mai târziu 47 | Codul sursă 48 | Ne dorim să facem aplicaţiile fucţionale chiar şi la telefoanele gândite să conserve bateria în detrimentul funcţionalităţii.\n\nCea mai bună cale de a face proiectul cunoscut este să apreciaţi şi să comentaţi această aplicaţie gratuită în PlayStore.\n\nMulţumim că ne ajutaţi să facem sistemul Android mai bun! 49 | Help translate the app 50 | Facem aplicaţile să funcţioneze 51 | Permiteți programarea exactă a alarmelor 52 | Vă rugăm să ne permiteți să programăm alarme exacte pentru a testa corect procesarea fundalului bazată pe alarmă. 53 | Ceva n-a mers bine. 54 | Benchmark funcționează 55 | -------------------------------------------------------------------------------- /app/src/main/res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Начать проверку 6 | Остановить проверку 7 | Проверка 8 | Проверка запущена (%1$s%2$s). Нажмите, чтобы остановить. 9 | Проверка завершена, нажмите для просмотра результатов 10 | Проверка уже выполняется 11 | Остановить 12 | Очистить 13 | Работа 14 | Будильник 15 | Основное 16 | Поделиться 17 | Поделиться с 18 | Отчёт 19 | Продолжительность 20 | Внимание 21 | Пожалуйста, не ставьте телефон на зарядку и постарайтесь не пользоваться им во время проверки. 22 | Отмена 23 | ОК 24 | Общая оценка 25 | 26 | 1 час 27 | 2 часа 28 | 3 часа 29 | 4 часа 30 | 5 часов 31 | 6 часов 32 | 7 часов 33 | 8 часов 34 | 35 | 36 | DontKillMyApp.com 37 | Эл. почта 38 | Другие варианты 39 | 40 | Как это работает 41 | Во время проверки запускается фоновая служба с защитой от блокировки и планируются повторяющиеся задачи в основном потоке (каждые 10 секунд), специальном исполнителе потока (каждые 10 секунд), а также планируются повторяющиеся будильники с помощью AlarmManager.setExactAndAllowWhileIdle (каждые 10 минут). В конце путем сравнения ожидаемых и выполненных задач рассчитывается оценка.\n\nОценки, близкие к 100% — это хороший результат, то есть в это время не применялись нестандартные оптимизации батареи. Кстати, рекомендуем повторить проверку в течение недели, поскольку некоторые производители ограничивают приложения, не запускавшиеся какое-то время.\n\nДИАГРАММА\n\nВ строках диаграммы представлены пятиминутные интервалы. В идеале на диаграмме должно быть 30 кружков и треугольников в каждой строке, а также квадратик на каждой второй строке. Большие пустые участки указывают на проблему — приложения могут работать некорректно, если Вы не поменяете настройки телефона.\n\n\Чтобы узнать подробнее, как выполняются проверки, см. код приложения: https://github.com/urbandroid-team/dontkillmy-app 42 | Обратиться в поддержку 43 | Рассказать друзьям 44 | Проверка DontKillMyApp проверяет работу фоновых процессов вашего телефона, чтобы Ваши приложения работали корректно.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Пожалуйста, оцените приложение! 46 | Оценить 47 | Никогда 48 | Позже 49 | Исходный код 50 | Мы хотим, чтобы приложения работали даже на тех телефонах, производители которых берегут батарею в ущерб функциональности.\n\nЛучший способ рассказать об этом бесплатном открытом проекте — оставить оценку и комментарий в магазине Google Play.\n\nОт всего сердца благодарим Вас за помощь — вместе мы сделаем экосистему Android лучше! 51 | Помочь с переводом приложения 52 | Помогает приложениям работать 53 | Представляем официальное приложение DontKillMyApp — с ним приложения начнут нормально работать даже на аппаратах Pixel. 54 | 55 | Приложение поможет настроить фоновые задачи телефона так, чтобы приложения работали даже тогда, когда Вы НЕ СМОТРИТЕ на экран телефона. 56 | 57 | Оцените работу Вашего телефона и узнайте настройки телефона с помощью проверки DontKillMyApp. 58 | 59 | Возможности: 60 | • Проверка DKMA — узнайте, насколько агрессивно Ваш телефон отключает фоновые процессы 61 | • Инструкции — следуйте пошаговым инструкциям, чтобы убрать большинство ограничений фоновых процессов 62 | • Добейтесь перемен — помогите смартфонам стать действительно умными, отправив результаты проверки на dontkillmyapp.com 63 | 64 | DontKillMyApp — это утилита для проверки того, как Ваш телефон работает с фоновыми процессами. Вы можете провести проверку перед настройкой телефона, проследовать инструкциям и затем снова проверить, как Ваш телефон распоряжается фоновыми процессами. 65 | 66 | Вы можете прямо из приложения отправить Ваши результаты проверки разработчикам сайта dontkillmyapp.com — они учтут Ваши результаты и формируют общую оценку производителя. 67 | 68 | Как работает проверка? (Используется технический язык!) 69 | 70 | Во время проверки запускается фоновая служба с защитой от блокировки и планируются повторяющиеся задачи в основном потоке (каждые 10 секунд), специальном исполнителе потока (каждые 10 секунд), а также планируются повторяющиеся будильники с помощью AlarmManager.setExactAndAllowWhileIdle (каждые 10 минут). В конце путем сравнения ожидаемых и выполненных задач рассчитывается оценка. Принцип таков! 71 | 72 | Чтобы узнать подробности, ознакомьтесь с кодом. Приложение имеет открытый код, доступный на https://github.com/urbandroid-team/dontkillmy-app 73 | Особая благодарность Doki (github.com/doubledotlabs/doki)." 74 | Разрешить точное планирование тревоги 75 | Пожалуйста, позвольте нам запланировать точные сигналы тревоги для правильной проверки фоновой обработки на основе сигнализации устройства Yoru. 76 | Что-то пошло не так. 77 | Бланка работает 78 | -------------------------------------------------------------------------------- /app/src/main/res/values-tr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Değerlendirmeyi başlat 6 | Değerlendirmeyi durdur 7 | Performans değerlendirmesi 8 | Değerlendirme çalışıyor (%1$s - %2$s) durdurmak için dokunun. 9 | Değerlendirme bitti, sonuçlar için dokunun 10 | Değerlendirme zaten çalışıyor 11 | Durdur 12 | Temizle 13 | İş 14 | Alarm 15 | Ana 16 | Paylaş 17 | İle paylaş 18 | Rapor 19 | Süre 20 | Uyarı 21 | Lütfen telefonuzu şarjdan çıkarın ve değerlendirme boyunca kullanmayın 22 | İptal et 23 | Tamam 24 | Toplam 25 | 26 | 1 saat 27 | 2 saat 28 | 3 saat 29 | 4 saat 30 | 5 saat 31 | 6 saat 32 | 7 saat 33 | 8 saat 34 | 35 | 36 | DontKillMyApp.com 37 | E-posta 38 | Diğer 39 | 40 | Nasıl çalışıyor 41 | Performans değerlendirmesi uyku engelleme ve planlanmış tekrar eden görevler ile bir önplan servisi başlatır. 42 | Yardım & destek 43 | Paylaş 44 | DontKillMyApp Benchmark uygulamaların telefonunuzda düzgün çalışması için telefonunuzdaki arkaplan işlemlerini inceler. \n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Lütfen, bizi değerlendirin! 46 | Değerlendir 47 | Asla 48 | Sonra 49 | Kaynak kodu 50 | Üreticilerin pil ömrünü işlevselliğe tercih ettiği telefonlarda bile biz uygulamaların çalışmasını istiyoruz.\n\nBu projeyi duyurmada yardım edebileceğiniz en iyi yol, bu ücretsiz ve açık kaynak kodlu uygulamayı PlayStore da değerlendirmek ve yorum yazmak.\n\nAndroid ekosistemini daha güzel bir yer haline getirmeye yardım ettiğiniz için çok teşekkürler. 51 | Uygulamayı tercüme etmeye yardım et 52 | Uygulamalar çalışsın 53 | Resmi DontKillMyApp uygulaması burada - Pixel telefonunuz olmasa bile uygulamaların sonunda düzgün çalışmasını sağlayın. Telefonunuzun arka plan görevlerini ayarlamanıza yardımcı olur, böylece uygulamalarınız şu anda ekrana bakmıyorken bile SİZİN için çalışabilir. DontKillMyApp testi ile telefonunuzun nasıl çalıştığını görün ve farklı ayarları test edin. Özellikler: • DKMA testi: Telefonunuzun arka plan uygulamalarını ne kadar agresif bir şekilde öldürdüğünü ölçün • Kılavuzlar: Çoğu arka plan işlem kısıtlamasının üstesinden gelmek için eyleme geçirilebilir adımlar alın • Değişiklik yapın: Kıyaslama raporunuzu dontkillmyapp.com\'da paylaşarak akıllı telefonların akıllı kalmasına yardımcı olun DontKillMyApp, telefon unuzun arka plan işlemlerini ne kadar iyi desteklediğini görmek için bir test aracıdır. Telefonunuzu kurmadan önce ölçebilir, ardından kurulum kılavuzlarını inceleyebilir ve telefonunuzun arka planda ne kadar kaytardığını görmek için tekrar test yapabilirsiniz. Raporunuzu uygulama aracılığıyla, onu derleyen ve genel negatif puanı buna dayandıran dontkillmyapp.com web sitesinin editörleriyle paylaşabilirsiniz. Test nasıl çalışır? (Teknik!) Uygulama, uyandırma kilidi ile bir ön plan hizmetini başlatır ve ana iş parçacığında tekrarlayan görevler, özel bir iş parçacığı yürütücüsü ve düzenli alarmlar (AlarmManager.setExactAndAllowWhileIdle) kurar. Ardından yürütüleni ve bekleneni hesaplar. Bu kadar! Daha fazla ayrıntı için kodu kontrol edin. Uygulama, https://github.com/urbandroid-team/dontkillmy-app adresinde bulunan açık kaynaklıdır. Doki\'ye özel teşekkürler (github.com/doubledotlabs/doki). 54 | Tam alarm planlamasına izin ver 55 | Lütfen Yoru cihaz alarm tabanlı arka plan işlemeyi düzgün bir şekilde test etmek için kesin alarmları planlamamıza izin verin. 56 | Bir şeyler yanlış gitti. 57 | Benchmark çalışıyor 58 | -------------------------------------------------------------------------------- /app/src/main/res/values-uz/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Benchmarkni boshlash 6 | Benchmarkni to\'xtatish 7 | Benchmark 8 | Benchmark ishlamoqda (%1$s - %2$s) To\'xtatish uchun bosing. 9 | Benchmark yakunlandi, natijasi ni ko\'rish uchun bosing 10 | Benchmark allaqachon boshlangan 11 | To\'xtatish 12 | Tozalash 13 | Ish 14 | Vaqt 15 | Asosiy 16 | Ulashish 17 | Bizni do\'stlaringiz bilan ulashing! 18 | Hisobot berish 19 | Masofasi 20 | Ogohlantirish 21 | Iltimos, benchmark davomida telefoningizni elektr quvvatlagichga ulamang. 22 | Bekor qilish 23 | OK 24 | Jami 25 | 26 | 1 soat 27 | 2 soat 28 | 3 soat 29 | 4 soat 30 | 5 soat 31 | 6 soat 32 | 7 soat 33 | 8 soat 34 | 35 | 36 | DontKillMyApp.Com 37 | 38 | Bu qanday ishlaydi 39 | Benchmark uyg\'onish blokirovkasi bilan oldingi xizmatni ishga tushiradi va asosiy oqimdagi takroriy vazifalarni (har 10 soniyada), maxsus tasma ijrochisini (har 10 soniyada) rejalashtiradi va AlarmManager.setExactAndAllowWhileIdle (har 10 daqiqada) yordamida muntazam signallarni rejalashtiradi. Keyin bajarilgan va bajarilganlarni taqqoslash orqali ballni hisoblab chiqadi. kutilmoqda.\n\n100% ga yaqin ballar yaxshi natijalardir – nostandart batareya optimallashtirishlari hozircha qo‘llanilmagan. Testni bir haftadan keyin takrorlash yaxshi bo‘ladi, chunki ba’zi OEM’lar ma’lum muddat foydalanilmayotgan ilovalarga cheklovlar qo‘yishi mumkin.\n\nGRAFI\n\nGrafikdagi har bir qator 5 daqiqani bildiradi. Ideal holda siz har bir chiziqda 30 ta doira va uchburchakni va har ikkinchi chiziqda bitta kvadratni ko\'rasiz. Bo‘sh joyning kattaroq hududlari muammoni ko‘rsatadi – agar siz telefon sozlamalarini o‘zgartirmasangiz, ilovalaringiz mo‘ljallanganidek ishlamasligi mumkin.\n\n\Batafsil ma’lumot uchun sahifasida ilova kodini tekshiring. https://github.com/urbandroid-team/dontkillmy-app 40 | Biz bilan bog\'lanish 41 | Boshqalarga ulashing 42 | Iltimos, bizning ishimizga baho bering 43 | Baholash 44 | Hech qachon 45 | Keyinroq 46 | Ilova kodi 47 | Biz ilovalarni ishlab chiqaruvchilari funksiyadan ko‘ra batareya quvvatini uzoqqa yetishini afzal ko‘rgan telefonlarda ham ishlashini istaymiz.\n\nUshbu loyihani yanada yaxshilashga yordam berishning eng yaxshi yo‘li bu bepul va ochiq manbali ilovani Play Store’da baholash va sharhlashdir.\n\nKatta rahmat. Android ekotizimini yaxshiroq qilishimizga yordam berganingiz uchun! 48 | Ilovani tarjima qilishda yordam berish 49 | Ilovalar ishlab tursin! 50 | Rasmiy DontKillMyApp ilovasi shu yerda – Pixel qurilmangiz boʻlmasa ham, ilovalarni nihoyat toʻgʻri ishlashiga imkon bering. 51 | 52 | Telefoningiz fonidagi vazifalarni sozlashda yordam beradi, shunda ilovalaringiz hozir ekranga qaramasangiz ham SIZ uchun ishlashi mumkin. 53 | 54 | Telefoningiz qanday ishlashini ko\'ring va DontKillMyApp benchmark yordamida turli xil sozlamalarni sinab ko\'ring. 55 | 56 | Xususiyatlari: 57 | • DKMA benchmark: Telefoningiz fon ilovalarini qanchalik agressiv tarzda o‘ldirishini o‘lchang 58 | • Qo‘llanmalar: Fon jarayonidagi ko‘pgina cheklovlarni yengib o‘tish uchun amalda bo‘ladigan qadamlarni oling 59 | • O‘zgartirish kiriting: ️Dontkillmyapp.com saytida sinov hisobotini baham ko‘rish orqali smartfonlarning aqlli bo‘lishiga yordam bering. 60 | 61 | DontKillMyApp bu sizning telefoningiz fonda ishlashni qanchalik yaxshi qo\'llab-quvvatlashini ko\'rish uchun sinov vositasidir. Telefoningizni sozlashdan oldin oʻlchashingiz mumkin, soʻngra sozlash qoʻllanmalarini koʻrib chiqing va telefoningiz fonda qanchalik boʻshashayotganini koʻrish uchun yana bir bor taqqoslashingiz mumkin. 62 | 63 | Hisobotingizni ilova orqali dontkillmyapp.com veb-saytining saqlovchilari bilan baham ko\'rishingiz mumkin, ular uni tuzadi va umumiy salbiy ballni unga asoslaydi. 64 | 65 | Benchmark qanday ishlaydi? (Texnik!) 66 | 67 | Ilova uyg\'onish blokirovkasi bilan oldingi xizmatni ishga tushiradi va asosiy tarmoqdagi takroriy vazifani, maxsus ip ijrochisini rejalashtiradi va muntazam signallarni (AlarmManager.setExactAndAllowWhileIdle) rejalashtiradi. Keyin bajarilgan va kutilganlarni hisoblab chiqadi. Bo\'ldi shu! 68 | 69 | Batafsil ma\'lumot olish uchun kodni tekshiring. Ilova ochiq manba hisoblanadi: https://github.com/urbandroid-team/dontkillmy-app 70 | Dokiga alohida rahmat (github.com/doubledotlabs/doki). 71 | Aniq signalni rejalashtirishga ruxsat bering 72 | Iltimos, Yoru qurilmasining signal asosida fonni qayta ishlashni to\'g\'ri sinash uchun aniq signallarni rejalashtirishga imkon bering. 73 | Nimadir noto\'g\'ri bajarildi. 74 | Kalitmark ishlamoqda 75 | -------------------------------------------------------------------------------- /app/src/main/res/values-v31/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #FFFFFF 5 | @android:color/system_accent1_500 6 | @android:color/system_accent1_800 7 | @android:color/system_accent2_500 8 | @android:color/system_neutral1_0 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | Bắt đầu kiểm tra 6 | Dừng kiểm tra 7 | Kiểm tra 8 | Đang chạy kiểm chuẩn (%1$s - %2$s) Nhấn để dừng. 9 | Đã hoàn thành kiểm tra, nhấn để xem kết quả 10 | Benchmark đang chạy 11 | Dừng 12 | Xóa 13 | Thông báo hoạt động 14 | Báo thức 15 | Thông báo chính 16 | Chia sẻ 17 | Chia sẻ cho 18 | Báo cáo 19 | Thời hạn 20 | Cảnh báo 21 | Vui lòng không sạc điện thoại và không nên dùng khi đang kiểm tra. 22 | Huỷ 23 | OK 24 | Tổng cộng 25 | 26 | 1 tiếng 27 | 2 tiếng 28 | 3 tiếng 29 | 4 tiếng 30 | 5 tiếng 31 | 6 tiếng 32 | 7 tiếng 33 | 8 tiếng 34 | 35 | 36 | DontKillMyApp.com 37 | Email 38 | Khác 39 | 40 | Cách hoạt động 41 | Kiểm tra bắt đầu với một dịch vụ tiền cảnh với dịch vụ đánh thức bị khóa và bố trí để các tác vụ được lặp lại mỗi 10 giây cho chuỗi chính, cho bộ xử lí chuỗi riêng (mỗi 10 giây) và đặt đồng hồ đánh thức bằng cách dùng lớp AlarmManager.setExactAndAllowWhileIdle (mỗi 10 phút). Rồi nó tính điểm bằng cách so sánh những thông báo được đặt ra và những thông báo đã được nhận. \n\nĐiểm càng gần với 100% thì càng tốt - việc tối ưu hoá pin không tiêu chuẩn chưa được áp dụng. Bạn nên lặp lại việc kiểm tra sau một tuần là một ý tưởng tốt vì có một số OEM (nhà sản xuất gốc) chặn lại những dịch vụ trong nền khi không sử dụng.\n\n BIỂU ĐỒ\n\nMỗi hàng trong biểu đồ tương ứng với năm phút. Trên lý thuyết bạn sẽ thấy 30 hình tròn và tam giác trong một dòng, và một hình vuông mỗi dòng thứ hai. Những khu vực mà có nhiều phần trắng biểu thị vấn đề - những ứng dụng của bạn có thể không hoạt động như mong đợi nếu bạn không thay đổi cài đặt trong điện thoại bạn.\n\nĐể biết thêm thông tin vui lòng đọc mã nguồn tại https://github.com/urbandroid-team/dontkillmy-app 42 | Liên hệ hỗ trợ 43 | Chia sẻ cho người khác 44 | Kiểm chuẩn của DontKillMyApp kiểm tra việc xử lí dịch vụ nền để cho những ứng dụng hoạt động đúng cách.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | Xin hãy đánh giá chúng tôi! 46 | Đánh giá 47 | Không nhắc tôi nữa 48 | Để sau 49 | Mã nguồn 50 | Chúng tôi muốn các ứng dụng hoạt động trong điện thoại mà các nhà sản xuất ưu tiên pin hơn chức năng.\n\n Cách tốt nhất bạn có thể giúp là đánh giá ứng dụng miễn phí và mở trên cửa hàng Play.\n\nCảm ơn dã giúp chúng tôi làm hệ điều hành Android tốt hơn! 51 | Giúp phiên dịch ứng dụng 52 | Làm ứng dụng hoạt động 53 | Ứng dụng DontKillMyApp (Dịch là "Đừng giết ứng dụng của tôi") chính thức đã ở đây - Làm các ứng dụng hoạt động mà không cần điện thoại Google Pixel. 54 | 55 | Giúp bạn thiết lập các quá trình dưới nền không bị tắt để khi màn hình tắt thì ứng dụng của bạn vẫn hoạt động. 56 | 57 | Xem điện thoại của bạn đang hoạt động ra sao và thử các cài đặt với Benchmark của DontKillMyApp. 58 | 59 | Các tính năng: 60 | - Benchmark DKMA: Kiểm tra xem điện thoại của bạn có quyết liệt dừng các ứng dụng nền đến đâu 61 | - Hướng dẫn: Nhận các bước dễ dàng dể khắc phục những hạn chế về các quá trình nguồn 62 | - Tạo nên sự thay đổi: Giúp điện thoại thông minh vẫn trở nên thông minh bằng cách chia sẻ Benchmark trên dontkillmyapp.com 63 | 64 | DontKillMyApp là một dụng cụ Benchmark để xem điện thoại hỗ trợ các quá trình nền như thế nào. Ứng dụng có thể đo trước và sau khi khi điện thoại được thiết lập để xem điện thoại đang hoạt động trong nền thế nào. 65 | 66 | Bạn có thể chia sẻ các báo cáo đến những người bảo trì của trang dontkillmyapp.com - những người biên dịch chúng và so sánh với điểm trung bình trên đó. 67 | 68 | Cách kiểm chuẩn họat động (Mang tính kĩ thuật). 69 | 70 | Ứng dụng bắt đầu với một dịch vụ tiền cảnh với dịch vụ đánh thức bị khóa và bố trí công việc được lặp lại cho chuỗi chính, cho bộ xử lí chuỗi riêng và đặt đồng hồ báo thức (AlarmManager.setExactAndAllowWhileIdle). Sau đó nó tính điểm thực tế so với mong đợi. Chỉ như vậy thôi! 71 | 72 | Mọi thông tin thêm vui lòng truy cập vào ứng dụng. Ứng dụng này có mã nguồn mở tại https://github.com/urbandroid-team/dontkillmy-app 73 | Cảm ơn sâu sắc tới Doki (github.com/doubledotlabs/doki). 74 | Cho phép lập lịch báo động chính xác 75 | Vui lòng cho phép chúng tôi lên lịch báo động chính xác để kiểm tra đúng cách xử lý nền dựa trên báo động thiết bị Yoru. 76 | Có gì đó đã sai. 77 | Điểm chuẩn đang chạy 78 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | 開始測試 6 | 停止測試 7 | 測試 8 | 測試中 (%1$s - %2$s) 點擊可停止 9 | 測試結束,點擊以查看結果 10 | 測試已開始 11 | 停止 12 | 清除 13 | 分享 14 | 分享到 15 | 回報 16 | 測試時間 17 | 警告 18 | 請不要在測試中充電或使用手機。 19 | 取消 20 | 確認 21 | 總計 22 | 23 | 1 小時 24 | 2 小時 25 | 3 小時 26 | 4 小時 27 | 5 小時 28 | 6 小時 29 | 7 小時 30 | 8 小時 31 | 32 | 33 | DontKillMyApp.com 34 | 電子郵件 35 | 其他 36 | 37 | 運作原理 38 | 聯絡支援 39 | 跟別人分享 40 | 「DontKillMyApp 測試」檢查你手機的背景處理,以讓 App 順利運作。\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 41 | 幫我們評分,拜託! 42 | 評分 43 | 不再提醒 44 | 稍後 45 | 原始程式碼 46 | 即使在某些製造商眼裡,續航力比功能性重要,但我們依然希望 App 能正確運作。\n\n在 Play 商店幫我們評分,是增加這個開放原始碼的計畫曝光的最好方式。\n\n我們非常感激協助我們改善 Android 生態的人! 47 | 幫忙翻譯這個 App 48 | Make apps work 49 | DontKillMyApp 的官方應用程式就在這裡──即使你不是使用 Pixel,依然能讓 App 恢復正確運作。 50 | 51 | 幫你的手機設定好背景工作,如此一來 App 便能順利的協助你!即使沒有盯著螢幕也可以。 52 | 53 | 現在來看看你手機的狀況,並以「DontKillMyApp 測試」試試不同設定。 54 | 55 | 特點: 56 | - DKMA基準測試:測量你的手機是如何積極地封殺後台應用程式的 57 | - 指南:獲得可操作的步驟來剋服大多數的後台進程限制 58 | - 做出改變:️通過分享你的基準報告到dontkillmyapp.com,幫助智慧型手機保有智慧 59 | 60 | DontKillMyApp是一個基準工具,可以看到你的手機對後台處理的支持程度,在設置手機之前進行測量,然後通過設置指南,再次進行基準測試,看看手機在後台有多懈怠。 61 | 62 | 你可以通過該應用程式將你的報告分享給dontkillmyapp.com網站的維護者,他們會對報告進行匯編,並在此基礎上得出總體負分。 63 | 64 | 測試是如何運作的?(技術層面!) 65 | 66 | 此基準應用啟動一個帶有解鎖的前臺服務,在主線程上與自定義的線程執行器上安排重復的任務,並定期通知(AlarmManager.setExactAndAllowWhileIdle)。然後計算出已執行與預期的時程。That\'s it! 67 | 68 | 查看程式碼以取得詳細資訊。這個應用程式是開放原始碼的,並公開在 https://github.com/urbandroid-team/dontkillmy-app 69 | 70 | 特別感謝 Doki (github.com/doubledotlabs/doki)。 71 | 允许确切的警报安排 72 | 请允许我们安排精确的警报,以正确测试YORU设备基于警报的背景处理。 73 | 出了些问题。 74 | 基准正在运行 75 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DontKillMyApp 4 | DKMA 5 | 激活测试 6 | 终止测试 7 | 测试 8 | 测试中 (%1$s - %2$s) 点击即可终止 9 | 测试终止,点击以查看结果 10 | 测试已经开始了 11 | 终止 12 | 删除 13 | 运行 14 | 警示 15 | 主线 16 | 转发 17 | 转发给 18 | 回报 19 | 测试时长 20 | 警告 21 | 请不要在测试时充电或使用手机 22 | 取消 23 | 确认 24 | 总计 25 | 26 | 一小时 27 | 两小时 28 | 三小时 29 | 四小时 30 | 五小时 31 | 六小时 32 | 七小时 33 | 八小时 34 | 35 | 36 | DontKillMyApp.com 37 | 电子信箱 38 | 其他 39 | 40 | 运作原理 41 | 此基准测试启动一个预行的前台服务,将常态程序每十秒在主线程序与自定程序运行,并使用AlarmManager.setExactAndAllowWhileIdle()每十分钟通知乙次。 通過比较已运行的与预期的时长计算出一个分数。\n\n 100分是最高分;目前无法提供非标准的电池优化。 不过一些设备制造商可能会限制一段时间内未使用的应用程序,所以建议每周重复测试。\n\n 理想情况下,每行显示三十个圆形与三角形,每两行显示一个方形。越大的空白区域表示越有问题,如果不改变设备的设定,此应用程序可能无法准确运行。\n\n 更多信息请在https://github.com/urbandroid-team/dontkillmy-app 查看应用程序码。 42 | 联络支援 43 | 转发给好友 44 | 「DontKillMyApp 测试」检查你手机的后台处理,好让App 顺利运行。\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 45 | 请你留下好评,拜托! 46 | 好评 47 | 不再提醒 48 | 稍等 49 | 原始程序码 50 | 即使在某些制造商眼里,比起续航力,功能性更重要,但我们依然希望App 能正常运行。\n\n 在应用程序商店留下好评,是增加这个开方原始程序码计划的最佳方法。\n\n 非常感谢协助我们改良安卓环境的人! 51 | 协助翻译这个App 52 | 让应用程序运行 53 | DontKillMyApp 的官方应用程序就在这里──即使你不是使用 Pixel,依然能让App 恢复正确运行。 54 | 55 | 为你的手机设定好后台程序工作,就能让 App 顺利的协助你!即使每有盯着荧幕也行。 56 | 57 | 现在来看看你的手机状态,并且根据「DontKillMyApp 测试」是是不同的设定。 58 | 59 | 特色: 60 | - DKMA基准测试:测试你的手机如何积极的封杀后台应用程序 61 | - 引导:获取易操作的指示以克服大多数的后台程序限制 62 | - 做出改变:️通过分享你的基准报告到dontkillmyapp.com,协助智慧型手机保有智慧 63 | 64 | DontKillMyApp是一个基准工具,可以看到你的手机对后台程序支持的程度,在设定手机前进行测试,然后通过设定引导,再进行测试,看看手机在后台有多怠慢。 65 | 66 | 你能通过该应用程序分享你的报告给dontkillmyapp.com网站管理员,他们会整理报告汇总,并在此基准上得出总体负分。 67 | 68 | 测试是如何运行的?(技术层面!) 69 | 70 | 此基准应用启动一个带有解锁的前台服务,在主线序列与自定义序列运行器上安排重复的程序,并按时通知(AlarmManager.setExactAndAllowWhileIdle)。接着计算出已运行与预期的时长差。That\'s it! 71 | 72 | 查看程序码来获取更多资讯。这个应用程序是开放程序码,且公开在 https://github.com/urbandroid-team/dontkillmy-app 上。 73 | 74 | 特别感谢 Doki (github.com/doubledotlabs/doki)。 75 | 允许确切的警报安排 76 | 请允许我们安排精确的警报,以正确测试YORU设备基于警报的背景处理。 77 | 出了些问题。 78 | 基准正在运行 79 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | #6200EE 5 | #3700B3 6 | #6200EE 7 | @color/white 8 | 9 | 10 | #FF000000 11 | #c7000000 12 | #8a000000 13 | #61000000 14 | #33000000 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | DontKillMyApp 3 | DKMA 4 | Start benchmark 5 | Stop benchmark 6 | Benchmark 7 | Benchmark running (%1$s - %2$s) tap to stop. 8 | Benchmark finished, tap for results 9 | Benchmark is already running 10 | Stop 11 | Clear 12 | Work 13 | Alarm 14 | Main 15 | Share 16 | Share with 17 | Report 18 | Duration 19 | Warning 20 | Please keep your phone out of the charger and try to not use it during the entire benchmark. 21 | Cancel 22 | OK 23 | Total 24 | 25 | 26 | 1 hour 27 | 2 hours 28 | 3 hours 29 | 4 hours 30 | 5 hours 31 | 6 hours 32 | 7 hours 33 | 8 hours 34 | 35 | 36 | 37 | DontKillMyApp.com 38 | Email 39 | Other 40 | 41 | 42 | How it works 43 | The benchmark starts a foreground service with a wake lock and schedules repetitive tasks on the main thread (every 10s), a custom thread executor (every 10s) and schedules regular alarms using AlarmManager.setExactAndAllowWhileIdle (every 10 minutes). Then it calculates the score by comparing executed vs. expected.\n\nScores close to 100% are good results - non-standard battery optimizations are not applied at the moment. Although it is good to repeat the test in a week as some OEMs may apply limits to apps which are not used for a while.\n\nTHE GRAPH\n\nEach row in the graph represents 5 minutes. Ideally you see 30 circles and triangles on each line and one square every second line. Larger regions of white-space indicate a problem - your apps may not work as intended if you won\'t change your phone\'s settings.\n\n\For more details check the apps code at https://github.com/urbandroid-team/dontkillmy-app 44 | Contact support 45 | Tell others 46 | DontKillMyApp Benchmark checks your phone background processing to make apps on your phone work properly.\n\nhttps://play.google.com/store/apps/details?id=com.urbandroid.dontkillmyapp 47 | Please, rate us! 48 | Rate 49 | Never 50 | Later 51 | Source code 52 | We want to make apps work even on phones whose manufacturers prefer battery over functionality.\n\nThe best way you can help make this project visible is to rate and comment this free and open source tool on the Play Store.\n\nMany thanks for helping us making the Android eco-system a better place! 53 | Help translate the app 54 | 55 | Make apps work 56 | The official DontKillMyApp app is here - make apps finally work properly even if you do not own a Pixel. 57 | 58 | Helps you set up your phone background tasks so that your apps can finally work for YOU even when not looking at the screen right now. 59 | 60 | See how is your phone doing and test different settings with DontKillMyApp benchmark. 61 | 62 | Features: 63 | • DKMA benchmark: Measure how aggressively is your phone killing background apps 64 | • Guides: Get actionable steps to overcome most background process restrictions 65 | • Make a change:️Help smartphones stay smart by sharing your benchmark report to dontkillmyapp.com 66 | 67 | DontKillMyApp is a benchmark tool to see how well does your phone support background processing. You can measure before setting up your phone, then go through the setup guides and benchmark again to see how much has your phone been slacking in the background. 68 | 69 | You can share your report through the app to the maintainers of the dontkillmyapp.com website who compile it and base the overall negative score on it. 70 | 71 | How does the benchmark work? (Technical!) 72 | 73 | The app starts a foreground service with a wake lock and schedules repetitive task on the main thread, a custom thread executor and schedules regular alarms (AlarmManager.setExactAndAllowWhileIdle). Then it calculates executed vs. expected. That\'s it! 74 | 75 | For more details check the code. The app is open source available at https://github.com/urbandroid-team/dontkillmy-app 76 | Special thanks to Doki (github.com/doubledotlabs/doki). 77 | 78 | Allow exact alarm scheduling 79 | 80 | Please allow us to schedule exact alarms to properly test yoru device alarm-based background processing. 81 | Ops, something when wrong. 82 | Benchmark running 83 | 84 | 85 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 46 | 47 | 52 | 53 | 58 | 59 | 60 | 65 | 66 | 69 | 70 | 73 | 74 | 78 | 79 | 83 | 84 | 88 | 89 | 90 | 113 | 114 | 115 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | ext.kotlin_version = '1.6.21' 4 | repositories { 5 | google() 6 | jcenter() 7 | } 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.4.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | mavenCentral() 21 | maven { url 'https://jitpack.io' } 22 | } 23 | } 24 | 25 | task clean(type: Delete) { 26 | delete rootProject.buildDir 27 | } -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | The official DontKillMyApp app is here - make apps finally work properly even if you do not own a Pixel. 2 | 3 | Helps you set up your phone background tasks so that your apps can finally work for YOU even when not looking at the screen right now. 4 | 5 | See how is your phone doing and test different settings with DontKillMyApp benchmark. 6 | 7 | Features: 8 | • DKMA benchmark: Measure how aggressively is your phone killing background apps 9 | • Guides: Get actionable steps to overcome most background process restrictions 10 | • Make a change:️Help smartphones stay smart by sharing your benchmark report to dontkillmyapp.com 11 | 12 | DontKillMyApp is a benchmark tool to see how well does your phone support background processing. You can measure before setting up your phone, then go through the setup guides and benchmark again to see how much has your phone been slacking in the background. 13 | 14 | You can share your report through the app to the maintainers of the dontkillmyapp.com website who compile it and base the overall negative score on it. 15 | 16 | How does the benchmark work? (Technical!) 17 | 18 | The app starts a foreground service with a wake lock and schedules repetitive task on the main thread, a custom thread executor and schedules regular alarms (AlarmManager.setExactAndAllowWhileIdle). Then it calculates executed vs. expected. That's it! 19 | 20 | For more details check the code. The app is open source available it https://github.com/urbandroid-team/dontkillmy-app 21 | 22 | Special thanks to Doki (github.com/doubledotlabs/doki). -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/06.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/fastlane/metadata/android/en-US/images/phoneScreenshots/07.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | The official DontKillMyApp app is here - make apps finally work properly even if you do not own a Pixel. 2 | 3 | Helps you set up your phone background tasks so that your apps can finally work for YOU even when not looking at the screen right now. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | DontKillMyApp ✌️ Make apps work -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/video.txt: -------------------------------------------------------------------------------- 1 | https://www.youtube.com/watch?v=pRrGzH1YZ8s 2 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true 20 | # Kotlin code style for this project: "official" or "obsolete": 21 | kotlin.code.style=official -------------------------------------------------------------------------------- /ressrc/store-listing/ss1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/ressrc/store-listing/ss1.png -------------------------------------------------------------------------------- /ressrc/store-listing/ss2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/ressrc/store-listing/ss2.png -------------------------------------------------------------------------------- /ressrc/store-listing/ss3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/ressrc/store-listing/ss3.png -------------------------------------------------------------------------------- /ressrc/store-listing/ss4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/ressrc/store-listing/ss4.png -------------------------------------------------------------------------------- /ressrc/store-listing/ss5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/urbandroid-team/dontkillmy-app/70861cee6c185613f68c49c5bf23cd510386a888/ressrc/store-listing/ss5.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "dontkillmyapp" --------------------------------------------------------------------------------