Android 如何从我的服务类中获取显示对象?

Android 如何从我的服务类中获取显示对象?,android,android-layout,android-emulator,android-widget,android-manifest,Android,Android Layout,Android Emulator,Android Widget,Android Manifest,因为我的许多活动需要使用以下代码检查屏幕大小: Display display = getWindowManager().getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); 我决定将此代码从每个活动类移动到服务类,以便可以在一个位置定义代码并由每个活动类调用 因此,我将我的服务课程设置如下: public class MyService {

因为我的许多活动需要使用以下代码检查屏幕大小:

Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
我决定将此代码从每个活动类移动到服务类,以便可以在一个位置定义代码并由每个活动类调用

因此,我将我的服务课程设置如下:

public class MyService {

     private  Display display;
     public int screenWidth, screenHeight;

     public MyService(){
         display = getWindowManager().getDefaultDisplay(); //Error here

         screenWidth = display.getWidth();
         screenHeight = display.getHeight();

     }

     public int getScreenWidth(){
          return this.screenWidth;
     }
}
因为我的服务类不扩展
活动
,所以我不能直接使用
getWindowManager()
。我想知道如何解决这个问题,在我的服务类中显示
实例,而扩展活动类不需要它

这就是我希望我的活动可以访问如下屏幕宽度:

public class MyActivity extends Activity{

  MyService service;

  @Override
  public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       service= new MyService();

       int sWidth = service.getScreenWidth();
    }

}

使用屏幕的宽度和高度(以像素为单位)通常不是好的设计,但是您可以通过简单地将当前活动传递给位于其他类中的静态方法来实现您想要的,该类可以由所有应该执行代码的活动访问

public class MyService {
    static public int getScreenWidth(Activity activity){
         return activity.getWindowManager().getDefaultDisplay().getWidth();
    }
}

另一个注意事项是,当它不是android(它不应该是android服务)时,称它为服务是令人困惑的。

@getekha,如果使用像素宽度和高度不是一个好的设计,我想知道更好的方法是什么?例如,如果我想将布局组件定义为占据屏幕高度的1/3,请阅读和。如果制作游戏或其他需要更好地控制单个像素以创建所需效果的地方,使用屏幕大小可能是正确的方法,但通常不是