获取屏幕上正在显示的activity

        用过ActivityManager的童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。


    
    那么,从里面我们可以发掘点什么出来吗?


    
    仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。


    
     getRunningTasks有个整型参数,表示返回列表的最大个数。那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。

 

ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
Log.d("", "pkg:"+cn.getPackageName());
Log.d("", "cls:"+cn.getClassName()); 

          至于这个能做什么,嘿嘿,我相信你知道的。


   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将自定义的Surface显示在Android屏幕上,需要在自定义的SurfaceView中重写surfaceCreated()、surfaceChanged() 和surfaceDestroyed()方法。具体步骤如下: 1. 在XML布局文件中添加自定义的SurfaceView。 2. 创建自定义的SurfaceView类,并重写surfaceCreated()、surfaceChanged() 和surfaceDestroyed()方法。 3. 在surfaceCreated()方法中获取SurfaceHolder对象,通过SurfaceHolder对象获取Canvas对象,并在Canvas对象上绘制需要显示内容。 4. 在surfaceChanged()方法中设置SurfaceView的宽高和像素格式。 5. 在surfaceDestroyed()方法中释放资源,如停止绘制线程等。 6. 在Activity获取自定义的SurfaceView对象,并调用其方法(如startDraw()方法)开始绘制。 示例代码: ```java // 在XML布局文件中添加自定义的SurfaceView <com.example.customsurfaceview.MySurfaceView android:id="@+id/my_surface_view" android:layout_width="match_parent" android:layout_height="match_parent" /> // 创建自定义的SurfaceView类 public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private DrawThread mDrawThread; public MySurfaceView(Context context) { super(context); init(); } public MySurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mHolder = getHolder(); mHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { // 获取SurfaceHolder对象 mHolder = holder; // 开始绘制线程 mDrawThread = new DrawThread(mHolder); mDrawThread.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 设置SurfaceView的宽高和像素格式 mHolder.setFixedSize(width, height); mHolder.setFormat(PixelFormat.RGBA_8888); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 释放资源 mDrawThread.setRunning(false); mDrawThread = null; } // 绘制线程 private class DrawThread extends Thread { private SurfaceHolder mHolder; private boolean mRunning = true; public DrawThread(SurfaceHolder holder) { mHolder = holder; } public void setRunning(boolean running) { mRunning = running; } @Override public void run() { super.run(); while (mRunning) { Canvas canvas = mHolder.lockCanvas(); // 在Canvas上绘制需要显示内容 draw(canvas); mHolder.unlockCanvasAndPost(canvas); } } private void draw(Canvas canvas) { // 绘制逻辑 } } } // 在Activity获取自定义的SurfaceView对象,并调用其方法开始绘制 public class MainActivity extends AppCompatActivity { private MySurfaceView mSurfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSurfaceView = findViewById(R.id.my_surface_view); } @Override protected void onResume() { super.onResume(); mSurfaceView.startDraw(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值