Android 通过<;应用>;标记类

Android 通过<;应用>;标记类,android,Android,我有一个有50个活动的Android应用程序,我不会在log cat中跟踪当前正在运行的活动,而是在所有活动中创建ActivityManger或在每个活动中调用实例对象 我的想法是创建一个非活动类,并将其附加到Manifest.xml中的标记中,以便它能够跟踪所有活动。您可以创建一个Android服务并从那里打印当前活动。 例如,以下服务将以0.7秒的超时无限期运行,并将当前活动打印到LogCat: public class MyService extends Service { public

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


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

您可以创建一个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);

您可以使用它,并将其放置在
应用程序
类中:

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>

嘿,javanshir,谢谢你的快速回复。如果不起作用,请提供任何参考或样品让我知道。不过,一切都应该正常:)但我不能在暂停时破坏服务,并在简历上唤醒服务。我想你会找到停止服务的方法。我修改了答案,只需添加方法
ondestory
并调用
stopService(intent)
需要时。是的javanshir我已经在我的服务类中添加了它,但我的问题是调用onPause和onResume类似的活动方法,尽管这些方法在服务类中不可用。我们可以选择在暂停时停止服务,而不是通过Activity50活动停止服务吗?有点不对劲。
String activity = App.currentActivityName;