2017-01-03 27 views

回答

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並自行更新。