آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

بستن یک برنامه در حال اجرا

Criss  11 سال پیش  9 سال پیش
+3 0

سلام دوستان <

من از این کد استفاده میکنم که firefox رو ببندم <

اما کار نمیکنه و firefox در لیست برنامه های باز می مونه

اگر کد مناسبی رو دارید ممنون میشم <

  ActivityManager servMng;
servMng = (ActivityManager) SWFActivity.this.getSystemService(SWFActivity.this.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list = servMng.getRunningAppProcesses();
if (list != null) {
String value1 = "org.mozilla.firefox";
String value2 = "org.mozilla.firefox.App";
for (int i = 0; i < list.size(); ++i) {
if (value1.matches(list.get(i).processName) || value2.matches(list.get(i).processName)) {
int pid1 = android.os.Process.getUidForName(value1);
int pid2 = android.os.Process.getUidForName(value2);
android.os.Process.killProcess(pid1);
android.os.Process.killProcess(pid2);
Toast.makeText(getApplicationContext(), value1 + pid1, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), value2 + pid2, Toast.LENGTH_SHORT).show();

 

 

 برای این سوال 7 پاسخ وجود دارد.
پاسخ به سوال 
Criss  11 سال پیش
0 0

از این هم استفاده میکنم جواب نمیده <

 ActivityManager servMng;
servMng = (ActivityManager) SWFActivity.this.getSystemService(SWFActivity.this.ACTIVITY_SERVICE);
servMng.killBackgroundProcesses("com.freestyler.balls.criss");

 پرمیژن هم ست کردن <

 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
 

 

پاسخ به سوال 
Criss  11 سال پیش
+2 0

هر بار که سوالی میپرسم

پدرم در میاد آخرش هم جوابش رو نصفه و نیمه خودم پیدا میکنم <

برنامه بخوبی کار میکنه و میتونه یک برنامه در حال اجرا رو با دستور زیر ببنده <

package com.freestyler.kill.criss;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;


public class KillActivity extends Activity {

Button theButton;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
theButton = (Button) findViewById(R.id.button);
theButton.setOnClickListener(new Button.OnClickListener() {

@Override
public void onClick(View v)
{

ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
mActivityManager.killBackgroundProcesses("com.freestyler.balls.criss");

}
});
}
}

در واقع برنامه از لیست برنامه های موجود که در اکلیپس نمایش داده میشه بسته میشه <

اما از لیست مولتی تسکینگ (recent app) محیط اندروید خارج نمیشه <

برای این قسمت باید چکار کرد ؟

 

+1 0
عوضش سوالاتت بوی اینو میده که داری برنامه نویسی میکنی، بقول استاد r&d هم میکنی، تنبل نیستی، مثل بعضی سوالات من و ...، بگذریم، اینم جستجو کردی؟ clear recent apps android programmatically (11 سال پیش)
0 0
همین الان دارم همین کار رو میکنم < بهترین جوابی که داده شده اینه < لینک (11 سال پیش)
0 0
من روی گوشی خودم تست کردم < android 5 < هر برنامه ای رو که خارج میشم < توی recent list میمونه ! :| چکار باید کرد ؟ پس چطوری از قیمت AppManager خود اندروید برنامه های در حال اجرا بسته می شوند ؟ (11 سال پیش)
0 0
یا خدا !! الان تست کردم < از قسمت Settings > Apps > pakage name > force Stop برنامه بسته میشه < اما توی recent apps میمونه ! (وسلام و علیکم و رحمه الله و برکاته - پدرم در اومد تازه جوابش رو پیدا کردم ! که نمیشه) (11 سال پیش)
+1 0
حدس من اینه که این قسمت یعنی recents مثل یه برنامه جداست، و خارج از اون API اندروید هست و فقط دست کاربر هست، نشون به اون نشون که یه برنامه بود اسمش یادم نیست که با Xposed کار میکرد که یه نوتیفیکیشن دائمی داشت وقتی انتخابش میکردم لیست recents پاک میشد. (11 سال پیش)
پاسخ به سوال 
Criss  11 سال پیش
0 0

از صبح دارم سرچ میکنم ! چرا پس پیدا نمیشه ؟!

حتی اگر از این دستور توی CMD  استفاده بشه <

باز هم برنامه ها بسته میشن < اما توی مولتی تسینگ (recent app) اندروید باز میمونند !

 adb shell am kill-all
پاسخ به سوال 
Criss  11 سال پیش
0 0

کل بازار رو سرچ کردم < هیچ Task Manager که یه برنامه نویس ایرانی اون رو نوشته باشه وجود نداره !

توی github.com هم کلا چهارتا برنامه بیشتر وجود نداره که توی همشون از متد killBackgroundProcesses استفاده شده !

 

 لینک

0 0
سلام جوابش رو پیدا کردی که چجوری میشه برنامه رو بست ؟ منم الان به این کد احتیاج دارم، اگر پیدا کردی لطفا کمک کن ممنون (10 سال پیش)
پاسخ به سوال 
احمد  10 سال پیش
0 0

اقا منم الان همین مشکل را دارم برنامه که با دکمه home میره توی backgrund بسته نمیشه و دوباره که باز میشه کرش می کنه 

 package ir.na9os;

import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;

import my_class.G;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;


public class ActivityEnhanced extends Activity {

	private long time = 3000;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		G.CurrentActivity = this;

		appisrun();
    }


	private void appisrun() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				if (isApplicationSentToBackground(G.context)) {
					try {
						 kill_process();
					} catch (Exception e) {
						e.printStackTrace();
					}
					try {
						 killBackgroundProcesses(G.context);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}, time);
	}

	protected void killBackgroundProcesses(final Context context) {
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		activityManager.killBackgroundProcesses(G.PACKAGE_NAME);
		Log.i(G.APP_LOG, "delete app 3");

	}


	public static boolean isApplicationSentToBackground(final Context context) {
		ActivityManager am = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> tasks = am.getRunningTasks(1);
		if (!tasks.isEmpty()) {
			for (int i = 0; i < tasks.size(); i++) {

				ComponentName topActivity = tasks.get(i).topActivity;
				if (!topActivity.getPackageName().equals(
						context.getPackageName())) {
					Log.i(G.APP_LOG, "delete app 1");
					return true;
				}
			}
		}

		return false;
	}

	protected void kill_process() {
		try {
			Process suProcess = Runtime.getRuntime().exec("su");
			DataOutputStream os = new DataOutputStream(
					suProcess.getOutputStream());
			os.writeBytes("adb shell" + "\n");
			os.flush();
			os.writeBytes("am force-stop ir.na9os" + "\n");
			os.flush();
			Log.i(G.APP_LOG, "delete app 2");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	@Override
	protected void onPause() {
		super.onPause();
		appisrun();
	}

	@Override
	protected void onStop() {
		super.onStop();
		appisrun();
	}
    @Override
    protected void onResume() {
        super.onResume();
        G.CurrentActivity = this;
		appisrun();

    }
}

 

 

0 0
دلیل کرش این هست که مقادیر استاتیک روی حافظه باقی میمونه ، درواقع توی این حالت اکتیوتی و تمام متغیر ها از بین میره ، اما اپلیکیشن و متغیر های استاتیک روی حافظه باقی میمونه ، بنابراین وقتی برنامه بالا میاد یکسری از متغیر مقادیر قبلی خودشون رو دارند بهتره از system.exist استفاده کنید و با بستن پروسه برنامه با استفاده از pid و البته میتونید مقادیر استاتیک خودتون رو توی ondestroy خالی کنید (10 سال پیش)
0 0
دقیقا چطوری کریس بنویسمش (10 سال پیش)
پاسخ به سوال 
احمد  9 سال پیش
+3 0

سلام دوستان اومدم بنویسم جواب این مشکل پیدا نکردم که یک دفعه درست شد کشفش کردم

کد AndroidManifest.xml: تقریبا برای همه اکتیویتی ها همین کد را استفاده کردم

      <activity
            android:name="com.myapp.ActivityFilter"
            android:autoRemoveFromRecents="true"
            android:excludeFromRecents="true"
            android:label="@string/app_name" >
        </activity>

کد کلاس ActivityEnhanced:

import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;

import my_class.G;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

public class ActivityEnhanced extends Activity {

	private long time = 5000;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		G.CurrentActivity = this;

		appisrun();
	}

	private void appisrun() {
		new Handler().postDelayed(new Runnable() {
			@Override
			public void run() {
				if (isApplicationSentToBackground(G.context)) {
					try {
						kill_process();
						killapk();

					} catch (Exception e) {
						e.printStackTrace();
					}
					try {
						killapk();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}, time);
	}

	protected void killapk() {
		ActivityManager activityManager = (ActivityManager) G.context
				.getSystemService(ACTIVITY_SERVICE);
		activityManager.restartPackage(G.PACKAGE_NAME);
		killBackgroundProcesses(G.context);
	}

	protected void killBackgroundProcesses(final Context context) {
		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		activityManager.killBackgroundProcesses(G.PACKAGE_NAME);
		System.exit(0);
		Log.i(G.APP_LOG, "delete app 3");

	}

	public static boolean isApplicationSentToBackground(final Context context) {
		ActivityManager am = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> tasks = am.getRunningTasks(1);
		if (!tasks.isEmpty()) {
			for (int i = 0; i < tasks.size(); i++) {

				ComponentName topActivity = tasks.get(i).topActivity;
				if (!topActivity.getPackageName().equals(
						context.getPackageName())) {
					Log.i(G.APP_LOG, "delete app 1");
					return true;
				}
			}
		}

		return false;
	}

	protected void kill_process() {
		try {
			Process suProcess = Runtime.getRuntime().exec("su");
			DataOutputStream os = new DataOutputStream(
					suProcess.getOutputStream());
			os.writeBytes("adb shell" + "\n");
			os.flush();
			os.writeBytes("am force-stop " + G.PACKAGE_NAME + " \n");
			os.flush();
			Log.i(G.APP_LOG, "delete app 2");
			System.exit(0);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void onPause() {
		super.onPause();
		appisrun();
	}

	@Override
	protected void onStop() {
		super.onStop();
		appisrun();
	}

	@Override
	protected void onResume() {
		super.onResume();
		G.CurrentActivity = this;
		appisrun();

	}
}

داخل کلاس G هم:

 public static String PACKAGE_NAME;


@Override public void onCreate() { super.onCreate(); PACKAGE_NAME = getApplicationContext().getPackageName(); context = getApplicationContext(); layoutInflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

دسترسی های مورد نیاز:

 <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.GET_TASKS" />
+1 0
این جوری هم کامل بسته میشه هم توی لیست برنامه های اخیرا اجرا شده نیست با تشکر از دوست فعالمون کریس (9 سال پیش)
+1 0
دسترسی ها را هم اضافه کردم (9 سال پیش)
پاسخ به سوال 
mosafer  9 سال پیش
+2 0

اینم یه روش دیگه که اگه بخواید برنامتون کلا از لیست recent apps نمایش داده نشه!

ت منیفست برنامتون :

  <activity
android:name=".ActivityMainKioskMode"
android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

اینو اضافه کنید :

<category android:name="android.intent.category.HOME" /> <!-- recent apps برای پاک کردن برنامه از لیست -->



</intent-filter>


</activity>

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .