2016-08-30 9 views
1

私は50のアクティビティを持つAndroidアプリケーションを持っています。すべてのアクティビティでActivityMangerを作成したり、各アクティビティでインスタンスオブジェクトを呼び出す代わりに、log-catで現在のアクティビティを追跡しません。Androidで現在実行中のアクティビティを<application>タグクラス

私は、非アクティビティクラスを作成し、それをすべてのアクティビティを追跡するようにManifest.xmlのタグに追加することを考えました。

+1

50活動:

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

は、現在の活動のランニングにアクセスするには?何かが間違っている。 – gderaco

答えて

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); 
+0

こんにちはjavanshir迅速な返信ありがとうございます。参照またはサンプルをご提供ください –

+0

私に教えてください、それが動作しない場合。しかし、すべてがうまくいくはずです – Javanshir

+0

はいjavanshirその素晴らしい仕事...ありがとうございます –

0

あなたがこれを使用することができます、およびApplicationクラスにそれを置く:

public class App extends Application { 

    public static volatile String currentActivityName; 

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

そして、現在実行中のすべての活動から、設定:

01 manifest.xmlで

String activity = App.currentActivityName; 
関連する問題