在後臺運行工作線程的最佳實踐是定期更新活動中的UI元素。這裏的目標是避免任何形式的更新凍結屏幕,並且如果有任何特定的指導方針/標準應該遵循。運行工作線程以定期更新UI的最佳實踐
2
A
回答
1
爲後臺工作嘗試服務。 我爲你做了個例子。
試試這個。
TestActivity.java
public class TestActivity extends AppCompatActivity {
private final String TAG = "TestActivity";
public final static String RECEIVER_ACTION = "com.action.MyReceiverAction";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_work);
registerMyReceiver();
startService(new Intent(this, BackgroundService.class));
}
MyReceiver myReceiver = new MyReceiver();
private void registerMyReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVER_ACTION);
registerReceiver(myReceiver, intentFilter);
}
class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
Log.e(TAG, "onReceive() called");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myReceiver);
}
}
BackgroundService.java
public class BackgroundService extends Service {
private String TAG = "BackgroundService";
@Override
public void onCreate() {
super.onCreate();
Log.e(TAG, "onCreate() called");
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.e(TAG, "onBind() called");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand() called");
notifyToUI();
return super.onStartCommand(intent, flags, startId);
}
/**
* This Methd will notify your Activity
*/
private void notifyToUI()
{
Intent myIntent = new Intent();
myIntent.setAction(TestActivity.RECEIVER_ACTION);
sendBroadcast(myIntent);
}
}
末
現在在AndroidManifest.xml註冊BackgroundService文件
<service android:name=".BackgroundService"/>
+0
中使用intent service與LocalboadcastManager感謝您的示例代碼。這種方法可行,但在使用默認電源管理器的三星設備上,15分鐘左右後似乎會崩潰。有沒有辦法阻止電力經理殺死後臺服務? – Zishan
+0
你能告訴我你的崩潰日誌嗎?瞭解確切的問題將會有所幫助。 –
0
使用AlarmManager(或某個其他計時器)來定期啓動服務。該服務然後更新模型,並通知例如LocalBroadcastManager的UI線程。 UI線程可以使用BroadcastReceiver來捕獲Intent並自行更新。
相關問題
- 1. 正在運行的定期hadoop工作(最佳實踐)
- 2. Android更新UI線程元素 - 最佳實踐?
- 3. 最佳實踐以更新EAV錶行
- 4. 多線程最佳實踐
- 5. 多線程最佳實踐
- 6. Delphi線程最佳實踐
- 7. 源控制最佳實踐 - 定期從倉庫更新你的工作拷貝
- 8. LINQ更新程序 - 最佳實踐
- 9. Android,「更多詳情」UI最佳實踐?
- 10. (WPF)UI最佳實踐
- 11. 最佳實踐UI指南?
- 12. Master/Detail UI最佳實踐?
- 13. Android:確保UI操作在UI線程上完成的最佳實踐
- 14. Java UDP多線程的最佳實踐
- 15. java中的多線程最佳實踐
- 16. Java線程會話的最佳實踐
- 17. 更新CFEngine的update.conf的最佳實踐?
- 18. SQL Server數據庫變更工作流程的最佳實踐
- 19. Android - 定期服務的最佳實踐
- 20. Java:更新信息的最佳實踐
- 21. 自動更新的最佳實踐
- 22. 並行使用異步工作流程的最佳實踐
- 23. 最佳實踐,以更新客戶端(GWT)Web應用程序
- 24. 最佳實踐:何時返回UI線程
- 25. 日期最佳實踐
- 26. iOS線程 - 回調最佳實踐
- 27. 最佳實踐來使用線程
- 28. ASP.NET和多線程最佳實踐
- 29. UI線程內的定期更新
- 30. ETL工具遷移:並行運行的最佳實踐
在Android –