我有一个包含50个活动的Android应用程序我不会在log-cat中跟踪当前的运行活动,而不是在所有活动中创建ActivityManger或在每个活动中调用实例对象。
我的想法是创建一个非活动类并将其附加到Manifest.xml中的标记,以便它跟踪所有活动。
答案 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;