androidservice優先順序
❶ 安卓開發 提高service優先順序 我做了一個有懸浮窗口的應用,可是懸浮窗在內存不足時會被系統關閉
木馬病毒
❷ android自啟動怎麼優先順序高
進程的優先順序 12); //實例化按鈕對象 Button btnDownload=(Button)findViewById(RMessage); Button btnDownload=(Button)findViewById(R.id.btnDownload); Button btnUpdate=(Button)findViewById(R.id.btnUpdate); //注冊按鈕的單擊事件 btnDownload.setOnClickListener(this); btnUpdate.setOnClickListener(this); } //實現按鈕的單擊時間事件 @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnDownload: //創建對象 MyAsyncTask myAsyncTask=new MyAsyncTask(); myAsyncTask.execute(null);//執行任務 break; case R.id.btnUpdate: break; } } private class MyAsyncTask extends AsyncTask<URL, Integer, String>{ //在UI中執行,更新UI @Override protected void onProgressUpdate(Integer... values) { mProgressBar.setProgress(values[0]); if(values[0]<100){ mTextView.setText("progress="+values[0]+"%"); } } //現在work thread中執行耗時操作 @Override protected String doInBackground(URL... params) { for (int i = 0; i < 100; i++) { publishProgress(i+1);//向onProgressUpdate發送消息 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return "download finished"; } //doInBackground結束後,執行本方法,result是doInBackground方法返回的數據 @Override protected void onPostExecute(String result) { mTextView.setText(result); } } } 12.9. 軟體開發術語 12.9.1性能 臨時對象越多,垃圾回收(GC)的頻率越高 GC佔用CPU,CPU被佔用時,無法響應用戶的操作 用戶感覺到卡,影響用戶體驗。 12.9.2資源池 存放一定數量的同樣類型的對象,當程序需要使用時,可以從資源池中獲取,使用完成,收回資源池。 等待下一次被使用。 示例:從資源池中獲取Message對象。 Message msg=Message.obtainMessage(); 提示:若之前沒有創建過Message,則創建給對象。Android系統會在適當時候回收該對象,方便下次取用。 提示:解決性能問題的前提是不能影響功能。
❸ 安卓考試題,在內存不足時,系統會殺死某些進程
通常在一部Android手機里同時運行著多個應用(app),每個app對應一個系統進程,當系統需要更多的資源(如內存)而空閑資源不足時,Android系統就會選擇殺掉一些「低優先順序」的進程以便釋放所需資源。Android系統是如何確定進程優先順序的高低的呢?如果一個app正在與用戶交互,那麼它所在的進程具有最高優先順序;其次,如果一個app是可見的,例如被一個對話框部分遮擋,它所在進程具有第二高的優先順序;再次,如果app當前是不可見的,也就是被切換到了後台,則它所在進程具有第三高的優先順序;這里要補充一點,如果這個後台app啟動了一個service,則它比一般的後台app優先順序高一些。最後,如果一個進程里沒有包含任何app,這個進程的優先順序是最低的。
❹ android進程分為哪5種優先順序順序是怎樣的
Andrid 5個進程及重要優先順序前台進程>可見進程>服務進程>後台進程>空進程,
它們的回收優先順序則反之
❺ android中的進程優先順序,說法錯誤的是
在Android中進程按優先順序可以分為五類,優先順序從高到低排列:
1.前台進程 該進程包含正在與用戶進行交互的界面組件,比如一個Activity。
2.可視進程 該進程中的組件雖然沒有和用戶交互,但是仍然可以被看到。
3.服務進程 該進程包含在執行後台操作的服務組件,比如播放音樂的Service。
4.後台進程 該進程包含的組件沒有與用戶交互,用戶也看不到 Service。
5.空進程 沒有任何界面組件、服務組件,或觸發器組件。
❻ Android-Android中service與application的生命周期有關系嗎
有關系的,在Android中進程按優先順序可以分為五類,優先順序從高到低排列:
1.前台進程 該進程包含正在與用戶進行交互的界面組件,比如一個Activity。
2.可視進程 該進程中的組件雖然沒有和用戶交互,但是仍然可以被看到。
3.服務進程 該進程包含在執行後台操作的服務組件,比如播放音樂的Service。
4.後台進程 該進程包含的組件沒有與用戶交互,用戶也看不到 Service。
5.空進程 沒有任何界面組件、服務組件,或觸發器組件。
Android系統是進程託管的,也就是說進程都是由系統來管理,系統會按照特定的算來來回收這些進程。在回收中秉承幾個原則:
1. 盡量延長進程的生命周期,不到必須的情況下不會回收,因為系統回收進程會影響用戶體驗
2. 按優先順序從低到高進行回收
3. 同等優先順序的進程越近使用越晚回收。
通過上面這些解釋,進程過一段時間後是會被回收的,但要遵循上面的這些原則,service和application的生命周期有關,只要進程被回收,那麼它所佔用的所有資源將被回收。
❼ android 設置進程調度優先順序默認值是多少
一個Pad上有很多媒體文件,然後每次開機後的一段時間內,Home Screen的反應都特別慢,有時候還會報出ANR的錯誤。從ANR文件/data/anr/traces.txt分析,發現系統列印的cpu佔有率中,android.process.media佔用非常高。所以懷疑是MediaProvider做文件掃描佔用CPU太多資源導致。
但是我們實際測試的時候,通過top –m 5查看cpu佔有率的時候,發現只要一操作Home,android.process.media進程cpu佔有率就會下降很多。
當時看到這個現象,直觀感覺就是MediaProvider搶佔CPU能力不夠。直接把該現象告訴領導,這個事情也就結了。但是一直沒在代碼中找到依據:總有地方設置進程的優先順序吧??
後來,時間充裕了,想起這個問題。果不其然,在MediaScannerService中,找到答案:
<span style="font-size:24px;">public void run()
{
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND +
Process.THREAD_PRIORITY_L
❽ android 中 自己寫的activity 的優先順序怎麼才能大於系統的 譬如來電 自己已經獲取號碼並寫了一個activity
Android中,Activity的級別永完都沒有來電這么高級別,因為手機最主要的功能,還是用來通話。
關於Android中的進程級別:
1、foreground process
正處於activity resume狀態
正處於bound服務交互的狀態
正處於服務在前台運行的狀態(StartForeGround()被調用)
Service生命周期正在被執行(onCreate(),onStart(),onDestroy())
BroadcastReceiver正在執行onReceive()方法
殺死foreground需要用戶響應,因為這個安全優先順序是最高的
是用戶操作所必須的,任一時間下,僅有少數進程會處於前台,僅當內存實在無法供給它們維持同時運行時才會被殺死。一般來說,在這種情況下,設備依然處於使用虛擬內存的狀態,必須要殺死一些前台進程以用戶界面保持響應。
•Android會依據進程中當前活躍組件的重要程度來盡可能高的估量一個進程的級別。比如說,如果一個進程中同時有一個服務和一個可視的activity,則進程會被判定為可視進程,而不是服務進程。
2、visible process
activity不在前端顯示,但也沒有完全隱藏,能夠看得見,比如彈出一個對話框
一個bound到visible或者foreground的activity的service
沒有前台組件,但仍可被用戶在屏幕上所見。當滿足如下任一條件時,進程被認為是可視的:
• 它包含著一個不在前台,但仍然為用戶可見的activity(它的onPause()方法被調用)。這種情況可能出現在以下情況:比如說,前台activity是一個對話框,而之前的 activity位於其下並可以看到。
• 它包含了一個綁定至一個可視的activity的服務。
可視進程依然被視為是很重要的,非到不殺死它們便無法維持前台進程運行時,才會被殺死。
3、Service process
正在運行的,不在上述兩種狀態的service
是由 startService() 方法啟動的服務,它不會變成上述兩類。盡管服務進程不會直接為用戶所見,但它們一般都在做著用戶所關心的事情(比如在後台播放mp3或者從網上下載東 西)。所以系統會盡量維持它們的運行,除非系統內存不足以維持前台進程和可視進程的運行需要。
4、background process
不可見狀態的activity進程,onstop被調用
包含目前不為用戶所見的activity(Activity對象的 onStop() 方法已被調用)。這些進程與用戶體驗沒有直接的聯系,可以在任意時間被殺死以回收內存供前台進程、可視進程以及服務進程使用。一般來說,會有很多背景進程 運行,所以它們一般存放於一個LRU(最後使用)列表中以確保最後被用戶使用的activity最後被殺死。如果一個activity正確的實現了生命周 期方法,並捕獲了正確的狀態,則殺死它的進程對用戶體驗不會有任何不良影響。
5、empty process
沒有運行任何component的進程,保留這個進程主要是為了緩存的需要
不包含任何活動應用程序組件。這種進程存在的唯一原因是做為緩存以改善組件再次於其中運行時的啟動時間。系統經常會殺死這種進程以保持進程緩存和系統內核緩存之間的平衡。
此外,一個進程的級別可能會由於其它進程依賴於它而升高。一個為其它進程提供 服務的進程級別永遠高於使用它服務的進程。比如說,如果A進程中的內容提供者為進程B中的客戶端提供服務,或進程A中的服務為進程B中的組件所綁定,則A 進程最低也會被視為與進程B擁有同樣的重要性。
❾ android開發如何將進程放到優先順序最高
有幾種方法可供參考:
方法1: 提高進程優先順序 startForeground(1, new Notification()); 降低進程優先順序 stopForeground(true);
onStart() 方法中進行提高優先順序操作,然後在onStop()方法中進行降低優先順序操作
這個方法可以將對應AP的ADJ臨時提高到2。
方法2:
找到這個進程對應的AndroidMannifest.xml文件,在其中添加屬性『android:persistent="true"』, 這樣可以將該進程設置為常駐內存進程,就可以降低被Kill的概率。以Acore進程為例, 在 /package/providers/ContactsProvider/AndroidMannifest.xml 文件中增加一行『android:persistent="true"』
具體修改示例如下:
<application android:process="android.process.acore" android:label="@string/app_label"
android:icon="@drawable/app_icon"
android:allowBackup="false"
android:persistent="true"
> 方法3:
在需要提高優先順序的地方調用:
final Intent it = new Intent();
it.setAction("android.intent.action.BOOST_DOWNLOADING");
it.putExtra("package_name", "com.android.contacts");
it.putExtra("enabled", true);
context.sendBroadcast(it);
在需要恢復到正常優先順序時調用:
final Intent it = new Intent();
it.setAction("android.intent.action.BOOST_DOWNLOADING");
it.putExtra("package_name", "com.android.contacts");
it.putExtra("enabled", false);
context.sendBroadcast(it);
onStart() 方法中進行提高優先順序操作,然後在onStop()方法中進行降低優先順序操作
這個方法可以將對應AP的ADJ臨時提高到7。
❿ android 簡訊攔截如何設置最高的優先順序
首先寫一個應用,注冊一個開機完成廣播接收者。
<receiver android:name=".MyBrocast" android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
然後在這個廣播接收者接收到信息之後馬上啟動一個service
public void onReceive(Context context, Intent intent) {
Log.v("MyBrocast.onReceive", "testtttttttttttt");
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Intent service=new Intent(context, MyService.class);
context.startService(service);
}
然後在service重新注冊一個接收簡訊的廣播接收者,優先順序2147483647
IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
localIntentFilter.setPriority(2147483647);
myService = new MyBrocast();
MyBrocast localMessageReceiver = myService;
Log.v("MyBrocast.onReceive", "onCreate");
Intent localIntent = registerReceiver(localMessageReceiver, localIntentFilter);
這種重啟手機就OK了,你也可以讓360,QQ郁悶的。