通过<application>标记类获取Android当前运行的Activity

时间:2016-08-30 12:43:56

标签: android

我有一个包含50个活动的Android应用程序我不会在log-cat中跟踪当前的运行活动,而不是在所有活动中创建ActivityManger或在每个活动中调用实例对象。

我的想法是创建一个非活动类并将其附加到Manifest.xml中的标记,以便它跟踪所有活动。

2 个答案:

答案 0 :(得分:2)

您可以创建Android服务并从那里打印当前活动。 例如,以下服务将无限期运行,超时时间为0.7秒,并将当前活动打印到LogCat:

public class MyService extends Service {

public static final String TAG = "Background Service";

public boolean wait;
public boolean stop = false;

SharedPreferences prefs;

@Override
public IBinder onBind(Intent intent) {
    Log.i(TAG, "On bind of service");
    return null;
}

@Override
public void onDestroy() {
    stop = true;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    (new Thread(new Runnable() {

        public void run() {
            try {
                update();
                return;
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        }

    })).start();

    return super.onStartCommand(intent, flags, startId);
}

public void update() {
    List list;
    String str;

    do {
        try {
            Thread.sleep(701L);
        } catch (InterruptedException interruptedexception) {
            interruptedexception.printStackTrace();
        }

        list = ((ActivityManager) getSystemService("activity"))
                .getRunningTasks(1);
        str = ((android.app.ActivityManager.RunningTaskInfo) list.get(0)).topActivity
                .getClassName();

        Log.d(TAG, str);
    } while (!stop);

    stopSelf();
}
}

您也可以在一段时间后传递值以停止服务。如果您还想知道如何启动服务,那么您可以在活动中执行以下操作:

Intent intent = new Intent(this, MyService.class);
startService(intent);

并执行以下操作以停止服务:

stopService(intent);

答案 1 :(得分:0)

您可以使用它,并将其放在Application类:

public class App extends Application {

    public static volatile String currentActivityName;

    @Override
    public void onCreate() {
        super.onCreate();
        currentActivityName = "MainActivity";
    }
}

从当前正在运行的每项活动中,设置:

@Override
protected void onResume() {
    super.onResume();
    App.currentActivityName = "thisActivityName";
}

在manifest.xml中:

<application android:name=".App"
        android:label="@string/app_name">
    ...
</application>

要访问当前正在运行的活动:

String activity = App.currentActivityName;