2017-03-03 2 views
0

Ich habe eine lange laufende Operation. Innerhalb eines Themas beginne ich eine neue Tätigkeit wie diesAndroid-Aktivität erscheint oben, wenn ich eine andere App verwende

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     new Thread(new Runnable() { 
      @Override 
      public void run() { 

       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        startActivity(new Intent(MainActivity.this,MainActivity.class)); 
       } 
      }); 
      } 
     }).start(); 
    } 

Das Problem ist, wenn ich eine andere App und die Thread-Oberflächen ausführen, wird die Aktivität auf dem oberen Rand des Bildschirms. Wie kann man diese Aktivität erzwingen, um nicht auf der Spitze zu sein?

+0

'startActivity (neu Intent (MainActivity.this, MainActivity.class));' Warum beginnen Sie Ihr wieder aktuelle activty? –

+0

Es ist ein Beispiel. In einem echten Fall starte ich einen anderen – Rainmaker

Antwort

0

Sie wie unten verwenden können ..

Handler splashHandler; 
splashHandler = new Handler(); 

splashHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 

       Intent loginIntent = new Intent(Splash.this, LoginActivity.class); 
       startActivity(loginIntent); 
       finish(); 

     } 
    }, 2000); 



@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    if (splashHandler != null) 
     splashHandler.removeCallbacksAndMessages(null); 
} 



@Override 
protected void onResume() { 
    super.onResume(); 
    if (splashHandler != null) 
     splashHandler.removeCallbacksAndMessages(null); 
} 
0

Dies geschieht, weil Sie den Kontext aus dem „anderen App“ sind immer. Sie sollten den Anwendungskontext und nicht einen Kontext aus der lokalen Aktivität übergeben. Verwenden Sie context.getApplicationContext() und speichern, die in einer lokalen Variablen, verwenden Sie dann diesen Kontext der Tätigkeit zu beginnen

Der Code sollte wie folgt sein:

@Override 
protected void onPostExecute(List<VideoDataDescription> result) { 
    super.onPostExecute(result); 
    MainActivity.progressDialog.dismiss(); 

    context.startActivity(new Intent(context, MainActivity.class)); 
} 

}

würden Sie rufen es wie folgt:

new MyTask(context).execute(); 
+0

funktioniert nicht. Das gleiche Verhalten – Rainmaker

Verwandte Themen