2016-03-28 88 views
0

我需要杀死我的应用程序来刷新它以防止强制停止,因为2个片段会从我们的服务器调用对象。我想要的是我的应用程序在片段视频完成后刷新。我所做的是放在android中的killProcess后执行某些操作

android.os.Process.killProcess(android.os.Process.myPid()); 

fragmentTransaction.commit();。但它所做的是再次显示视频片段。同样的事情发生时,我把方法调用片段更改后killProcess(我正在使用处理程序runnable来更改我的片段)。所以,killProcess也会杀死这些变量。我找不到任何关于这个东西的东西。

这里是我的代码:

public class fragChangeView extends AppCompatActivity { 
    FrameLayout frmLayout; 
    FragmentTransaction ft; 
    FragmentManager fm; 
    int fragNum; 
    Handler handler; 
    private LuksloftsFunc lFunc; 
    int changeFragDelay, changeFragDelay2; 
    MediaMetadataRetriever retriever = new MediaMetadataRetriever(); 
    int durationFromVidLen; 
    Long longChangeDelay; 

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

     frmLayout = (FrameLayout)findViewById(R.id.frmFragLayout); 
     Intent i = getIntent(); 
     String actName = i.getStringExtra("actName"); 

     fm = getSupportFragmentManager(); 
     ft = fm.beginTransaction(); 
     handler = new Handler(); 

     retriever.setDataSource("http://*video ip*/api/extras/permit_video.mp4", new HashMap<String, String>()); 
     String vidLen = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); 
     durationFromVidLen = Integer.parseInt(vidLen); 

     lFunc = LuksloftsFunc.getInstance(this); 
     changeFragDelay = Integer.parseInt(lFunc.getTimezoneCurrencyInterval()); 
     longChangeDelay = Long.parseLong(lFunc.getTimezoneCurrencyInterval()); 
     lFunc.updateAppLastRefreshTime(); 

     //startAlarmFragChange(); 

     switch (actName){ 
      case "video": 
       PermitVideoFrag frag1 = new PermitVideoFrag(); 
       ft.replace(R.id.frmFragLayout, frag1); 
       ft.commit(); 
       fragNum = 1; 
       break; 
      case "timezone": 
       ForexTimezoneFrag frag2 = new ForexTimezoneFrag(); 
       ft.replace(R.id.frmFragLayout, frag2); 
       ft.commit(); 
       fragNum = 2; 
       break; 
     } 
     try{ 
      handler.post(changeFrag); 
     }catch(Exception e){ 

     } 

    } 

    public void startAlarmFragChange(){ 
     //start alarmmanager fragChanger 
     AlarmManager am =(AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(getApplication(), AlarmFragChange.class); 
     PendingIntent pi = PendingIntent.getBroadcast(getApplication(), 0, intent, 0); 
     am.setRepeating(AlarmManager.ELAPSED_REALTIME, System.currentTimeMillis(), longChangeDelay, pi); 
     //end alarmmanager fragChanger 
    } 

    public void stopAlarmFragChange(){ 
     Intent intent = new Intent(getApplication(), AlarmFragChange.class); 
     PendingIntent sender = PendingIntent.getBroadcast(getApplication(), 0, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getApplication().getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 

    public void fragChanger(){ 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 

      switch (fragNum) { 
       case 1: 
        ForexTimezoneFrag frag2 = new ForexTimezoneFrag(); 
        ft.replace(R.id.frmFragLayout, frag2); 
        fragNum = 2; 
        changeFragDelay2 = changeFragDelay; 
        break; 
       case 2: 
        PermitVideoFrag frag1 = new PermitVideoFrag(); 
        ft.replace(R.id.frmFragLayout, frag1); 
        fragNum = 1; 
        changeFragDelay2 = durationFromVidLen; 
        break; 
      } 
      try { 
       ft.commit(); 
       Log.d("log1", "error on commit"); 
       /*if(lFunc.IsNeedAppRefresh()) { 
        android.os.Process.killProcess(android.os.Process.myPid()); 
       }*/ 
      } catch (Exception e) { 

      } 
    } 

    private Runnable changeFrag = new Runnable() { 
     @Override 
     public void run() { 
      fragChanger(); 
      /*if(lFunc.IsNeedAppRefresh()) { 

       Log.d("", "after kill process"); 
       android.os.Process.killProcess(android.os.Process.myPid()); 
      }*/ 
      //handler.postDelayed(changeFrag, changeFragDelay); 
      handler.postDelayed(changeFrag, changeFragDelay2); 
     } 
    }; 
} 
+0

如果你觉得你需要强制一个Android进程退出,你可能做错了什么。 –

+0

不,我不希望我的应用程序退出,我只是希望它在一段时间后刷新。 – rmanalo

+0

你如何定义“刷新”是什么?在不杀死流程的情况下,你想要看到什么? –

回答

0

我终于想通了,做什么。我更新了这样的代码;

public void fragChanger(){ 
     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     String fragName = ""; 
      switch (fragNum) { 
       case 1: 
        ForexTimezoneFrag frag2 = new ForexTimezoneFrag(); 
        ft.replace(R.id.frmFragLayout, frag2); 
        fragNum = 2; 
        fragName = "forex"; 
        changeFragDelay2 = changeFragDelay; 
        break; 
       case 2: 
        PermitVideoFrag frag1 = new PermitVideoFrag(); 
        ft.replace(R.id.frmFragLayout, frag1); 
        fragNum = 1; 
        fragName = "video"; 
        changeFragDelay2 = durationFromVidLen; 
        break; 
      } 
      try { 
       ft.commit(); 
       Log.d("log1", "fragName: "+fragName); 
       if(lFunc.IsNeedAppRefresh()) { 
        Log.d("log1", "app will refresh"); 
        android.os.Process.killProcess(android.os.Process.myPid()); 
       } 

      } catch (Exception e) { 
       Log.d("log1", "error on commit"); 

      } 
    } 

我也可以把它放在break;之前。它仍然是一样的。感谢男人。

相关问题