2016-07-07 61 views
0

我有一個啓動服務的活動。我希望服務能夠訪問Activity的成員變量(一個布爾值)。我在Activity中實現了一個getBoolean()方法,但是如何在服務中實例化Activity來訪問它?訪問共享數據的服務和活動

回答

0

使用SharedPreferences保存在活動數據和當啓動一個服務

SharedPreferences sharedPref = getSharedPreferences(「MYPREF宇可以訪問它在服務 在OnStartCommand方法「,Context.MODE_PRIVATE); sharedPref.getBoolean(「flag」,false);

+0

是的,我最終使用了SharedPreferences。只是認爲直接訪問會更快。 – user1118764

0

你不知道。相反,請使用廣播接收器或共享偏好設置。

實施例使用廣播接收器 -

public class MyService extends Service { 

    boolean mActivityBoolean; 

    BooleanReceiver mReceiver; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mReceiver = new BooleanReceiver(); 
     LocalBroadcastManager.getInstance(this).registerReceiver(
       mReceiver, new IntentFilter("activityBooleanIntent") 
     ); 
    } 

    @Override 
    public void onDestroy() { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); 
     super.onDestroy(); 
    } 

    public class BooleanReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      mActivityBoolean = intent.getBooleanExtra("activityBoolean", false); 
     } 
    } 
} 

public class MyActivity extends Activity { 

    void someMethodThatSendsABooloean(boolean trueOrFalse) { 
     ..... 
     Intent intent = new Intent(); 
     intent.setAction("activityBooleanIntent"); 
     intent.putExtra("activityBoolean", trueOrFalse); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
    } 
}